HDU-1829 A Bug's Life。并查集构造,与POJ1709异曲同工!
2017-04-14 08:47
459 查看
A Bug's Life
Find them, Catch them
都是并查集构造的题,不久前MQL学长给我们拉过POJ上那道题,稍微复杂点,过了这么久竟然差不多忘完了,比赛的时候由队友在做这道题,我一直在看其他的题,在确定其他的题都不好做而且这个题好几个队都过了所以我们打算攻一攻这个题,只是依稀记得要用一个数组存与其对立的点,那么我们将与其对立的点都用并查集连起来,直接找是否有冲突就可以了。还好在思路不是很混乱的时候做出了这道题,不过比赛还是被学弟虐菜了。。。。。
题意:2种性别的病毒,为了验证异性相吸原则,做了个实验,然后给出两两配对的关系,求是否有冲突。
思路:和POJ1709那道类似,用一个diff数组存与其对立的病毒,当然,初始化可以为-1或本身(自己不可能和自己对立),然后只需在输入的时候将未赋值的赋值,然后将与这个病毒对立的病毒和当前对立的病毒用并查集连接起来就行了,只要存在冲突,肯定是可以判断的。int find(int x)
{
return f[x]==x?x:f[x]=find(f[x]);
}
int main()
{
int t,n,m;
scanf("%d",&t);
int t1=1;
while(t--)
{
scanf("%d%d",&n,&m);
int u,v,ff=0;
for(int i=1;i<=n;i++) p[i]=i,f[i]=i;
for(int i=0;i<m;i++)
{
scanf("%d%d",&u,&v);
if(p[u]==u) p[u]=v;
if(p[v]==v) p[v]=u;
int u1=find(u),v1=find(v);
int u2=find(p[u]),v2=find(p[v]);
if(u2==v2||u1==v1) ff=1;
f[u2]=v1;
f[v2]=u1;
}
printf("Scenario #%d:\n",t1++);
if(ff) puts("Suspicious bugs found!");
else puts("No suspicious bugs found!");
puts("");//注意输出问题
}
return 0;
}
相关文章推荐
- POJ 2492 || HDU 1829:A Bug's Life(并查集)
- HDU 1829 && POJ 2492 A Bug's Life(种类并查集)
- HDU 1829 & POJ 2492 A Bug's Life (并查集)
- hdu 1829 &poj 2492 A Bug's Life(判断二分图、带权并查集)
- hdu 1829 &poj 2492 A Bug's Life(推断二分图、带权并查集)
- POJ 2492/hdu 1829 A Bug's Life【带权并查集】
- Hdu 1829 A Bug's Life && Poj 1182 食物链 (并查集偏移量的应用)
- HDU-1829 A Bug's Life (带权并查集)
- HDU 1829 A Bug's Life-基础种类并查集
- HDU - 1829 A Bug's Life (并查集应用)
- Hdu 1892&&Poj 2492 A Bug's Life[判断二分图 || 种类并查集]
- HDU 1829 A Bug's Life (并查集)
- HDU 1829 A Bug's Life(并查集的应用)
- hdu 1829 A Bug's Life(分组并查集)
- hdu 1829 A Bug's Life (基础并查集)
- hdu - 1829 A Bug's Life (并查集)&&poj - 2492 A Bug's Life && poj 1703 Find them, Catch them
- HDU 1829 A Bug's Life(种类并查集)
- HDU_1829 A Bug's Life(并查集)
- HDU 1829 A Bug's Life(带关系的并查集)
- HDU_1829 A Bug's Life [ 向量+并查集]