博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj2492
阅读量:4685 次
发布时间:2019-06-09

本文共 1698 字,大约阅读时间需要 5 分钟。

跟1703一样 两种状态 并查集+偏移量

两只虫子发射架关系 判断有没有虫子是同性恋 两两合并 在一棵树上找右没有两个节点跟跟节点的关系(只有0,1两种)是相同的,相同就是gay

注意一点 两组数据间有空行 

View Code
1 #include 
2 #include
3 int father[2001],num[2001],r[2001]; 4 int find(int x) 5 { 6 if(x!=father[x]) 7 { 8 int y = father[x]; 9 father[x] = find(father[x]);10 num[x] = (num[x]+num[y])%2;11 }12 return father[x];13 }14 void union1(int x, int y)15 {16 int x1 = find(x);17 int y1 = find(y);18 if(x1!=y1)19 {20 if(r[x1]>r[y1])21 {22 father[y1] = x1;23 num[y1] = (num[x]-num[y]+1)%2;24 }25 else26 {27 father[x1] = y1;28 num[x1] = (num[y]-num[x]+1)%2;29 if(r[x1] == r[y1])30 r[y1]++;31 }32 }33 }34 int main()35 {36 int i, j, m, n,t,a,b,g;37 long k;38 scanf("%d", &t);39 while(t--)40 {41 k++;42 scanf("%d%d", &n, &m);43 int flag = 0;44 for(i = 1 ; i <= n ; i++)45 {46 father[i] = i;47 r[i] = 0;48 num[i] = 0;49 }50 j = 0;51 for(i = 1 ; i <= m ; i++)52 {53 scanf("%d%d", &a,&b);54 if(a!=b)55 union1(a,b);56 if(find(a) == find(b)&&num[a]==num[b])57 flag = 1;58 }59 printf("Scenario #%ld:\n",k);60 if(flag == 0)61 printf("No suspicious bugs found!\n");62 else63 printf("Suspicious bugs found!\n");64 if(t!=0)65 printf("\n");66 }67 return 0;68 }

 

转载于:https://www.cnblogs.com/shangyu/archive/2012/07/08/2581903.html

你可能感兴趣的文章
C 多线程学习
查看>>
#Sam有话说#一握在手,话说十年
查看>>
匹配两个空格之间的字符。。。
查看>>
CSS 文字溢出 变成省略号 ...
查看>>
Spring事务
查看>>
java编程基础(三)流程控制语句
查看>>
让数据库跑的更快的7个MySQL优化建议
查看>>
jquery 取id模糊查询
查看>>
解决在vue中,自用mask模态框出来后,下层的元素依旧可以滑动的问题
查看>>
修改node节点名称
查看>>
Java 文件下载
查看>>
图论——读书笔记 (深度优先搜索)
查看>>
PAT(B) 1014 福尔摩斯的约会(Java)
查看>>
PAT甲级题解-1123. Is It a Complete AVL Tree (30)-AVL树+满二叉树
查看>>
项目开发总结报告(GB8567——88)
查看>>
BZOJ1930: [Shoi2003]pacman 吃豆豆
查看>>
SSH加固
查看>>
端口扫描base
查看>>
iOS IM开发的一些开源、框架和教程等资料
查看>>
FansUnion:共同写博客计划终究还是“流产”了
查看>>