标签:出度 VK 子图 完全 节点 vector 2017 aligned Round
A.Bear and Friendship Condition(完全图判定)
•题意
给你一个包含 n 个点,m 条边的无向图,判断是否存在三点 x,y,z,满足:
x与y , y与z 有边,但是 x与z 无边;
如果存在,输出 "NO",反之,输出 "YES";
•题解
整个图可划分成若干个联通子图,判断这若干个连通子图是否为完全图即可;
如果存在某个联通子图为非完全图,那么,肯定会找但满足上述条件的 x,y,z,输出 "NO";
反之,输出 "YES";
•Code1
求解图是否为完全图,我在模拟赛的时候,用出度判断的;
对于包含 x 个节点的完全图,共有 $\frac{x(x-1)}{2}$ 条边,每条边都表示 2度,所以共有 $x\cdot (x-1)$度;
那么,我可以用 DFS 在 O(x) 的时间复杂度内求出每个点的出度(或入度),这 x 个点的出度和应该等于 $x\cdot (x-1)$;
如果等于,则表明这个图为完全图,反之,为非完全图;
•Code2
另一种求解完全图的方法,特别简洁,by mxl(偷偷看她代码 tql);
不过,需要用 $vector$ 存图;
假设 a,b,c,d 构成一个完全图,那么,$vector$ 中存储的信息如下:
$\begin{aligned} &vector_a:b,c,d \\ &vector_b:a,c,d \\ &vector_c:a,b,d \\ &vector_d:a,b,c \end{aligned}$;
此时,你可发现不了什么,但是,如果 $vector_i$ 中额外加入其自身 i 呢?
$\begin{aligned} &vector_a:a,b,c,d \\ &vector_b:a,b,c,d \\ &vector_c:a,b,c,d \\ &vector_d:a,b,c,d \end{aligned}$;
这是,你会发现,对于完全图中的所有点,其指向的其他节点的信息完全相同;
所以,判断某图是否为完全图时,只需要判断在同一个图中的所有节点,$vector$ 中是否保存相同的信息即可;
这样是不是每个节点都需将 $vector$ 中的信息遍历一遍,那这样岂不太耗时了 ;
其实,只需判断处于同一个图中的 $a,b,c,d$ 点 $vector$ 中:
(1)size() 是否相同
(2)存在 $vector$ 中的最小的节点是否相同
即可;
标签:出度,VK,子图,完全,节点,vector,2017,aligned,Round 来源: https://www.cnblogs.com/violet-acmer/p/11561343.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。