http://acm.hdu.edu.cn/showproblem.php?pid=1829

http://poj.org/problem?id=2492

臭虫有两种性别,并且只有异性相吸,给定n条臭虫(编号1-n)和m对关系,判断是否是出现同性恋的情况。

这题跟食物链的题类似,这里只有两种关系,关系是同性或者异性。

对于每只动物创建两个元素  同性或异性,并用这 2×n个元素建立并查集。

首先判断输入的x和y是否是一个组的。是就flag=1.

然后,如果x和y是一对,那么合并x和y+n,x+n和y。

  1. #include <cstdio>
  2. const int maxn = ;
  3. int par[*maxn];
  4.  
  5. void init(int n)
  6. {
  7. for(int i=;i<=n;i++)
  8. par[i]=i;
  9. }
  10.  
  11. int find(int x)
  12. {
  13. return x==par[x]?x:par[x]=find(par[x]);
  14. }
  15.  
  16. void unite(int x,int y)
  17. {
  18. x=find(x);
  19. y=find(y);
  20. if(x!=y) par[x]=y;
  21. }
  22.  
  23. int main()
  24. {
  25. //freopen("a.txt","r",stdin);
  26. int t,n,m,a,b,j=;
  27. scanf("%d",&t);
  28. while(t--)
  29. {
  30. scanf("%d%d",&n,&m);
  31. init(n*);
  32. bool flag=;
  33. for(int i=;i<m;i++)
  34. {
  35. scanf("%d%d",&a,&b);
  36. if(find(a)==find(b)) flag=;
  37. else
  38. {
  39. unite(a+n,b);
  40. unite(a,b+n);
  41. }
  42. }
  43. printf("Scenario #%d:\n",j++);
  44. if(flag) printf("Suspicious bugs found!\n");
  45. else printf("No suspicious bugs found!\n");
  46. printf("\n");
  47. }
  48. return ;
  49. }

http://poj.org/problem?id=1703

给你两个罪犯,判断他们是否属于同一帮派,输入n个罪犯和m条关系,n个罪犯中至少有一个属于帮派Dragon,有一个属于  帮派Snake,m条关系中A表示询问着两个人是否属于同一帮派,D表示这两个人不属于同一帮派。

这题思路跟上面一样,但开始wa了几次,对并查集的理解还是不够深。

定义并查集为:并查集里的元素i-x表示i属于帮派x(这里面有3种关系,要么是同一帮派,要么是不同帮派,要么是不能确定。)同一个并查集的元素同时成立。

初始化并查集为 2*N,如果i表示属于帮派A,那么i+N表示属于帮派B,输入两个元素不在同一帮派的时候,就合并两个帮派的元素。

这题跟上面两题一样,都是不确定元素i属于集合A还是集合B,所以要保留所有的可能性。

  1. #include <cstdio>
  2. const int maxn = ;
  3. int par[maxn*];
  4.  
  5. void init(int n)
  6. {
  7. for(int i=;i<=n;i++)
  8. {
  9. par[i]=i;
  10. }
  11. }
  12.  
  13. int find(int x)
  14. {
  15. return x==par[x]?x:par[x]=find(par[x]);
  16. }
  17.  
  18. void unite(int x,int y)
  19. {
  20. x=find(x);
  21. y=find(y);
  22. if(x!=y)
  23. {
  24. par[x]=y;
  25. }
  26. }
  27.  
  28. int main()
  29. {
  30. // freopen("a.txt","r",stdin);
  31. int t,n,m,a,b;
  32. char s[];
  33. scanf("%d",&t);
  34. while(t--)
  35. {
  36. scanf("%d%d",&n,&m);
  37. init(n*);
  38. for(int i=;i<m;i++)
  39. {
  40. scanf("%s%d%d",s,&a,&b);
  41. if(s[]=='A')
  42. {
  43. if(find(a)==find(b)) printf("In the same gang.\n");
  44. else if(find(a)==find(b+n)) printf("In different gangs.\n"); //这里开始没想到 唉
  45. else printf("Not sure yet.\n");
  46. }
  47. else if(s[]=='D')
  48. {
  49. unite(a,b+n);
  50. unite(a+n,b);
  51. }
  52. }
  53. }
  54. return ;
  55. }

hdu - 1829 A Bug's Life (并查集)&&poj - 2492 A Bug's Life && poj 1703 Find them, Catch them的更多相关文章

  1. hdu 5458 Stability(树链剖分+并查集)

    Stability Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 65535/102400 K (Java/Others)Total ...

  2. [HDU 3712] Fiolki (带边权并查集+启发式合并)

    [HDU 3712] Fiolki (带边权并查集+启发式合并) 题面 化学家吉丽想要配置一种神奇的药水来拯救世界. 吉丽有n种不同的液体物质,和n个药瓶(均从1到n编号).初始时,第i个瓶内装着g[ ...

  3. hdu 1829 A Bug's Life(并查集)

                                                                                                    A Bu ...

  4. hdu 1829 &amp;poj 2492 A Bug&#39;s Life(推断二分图、带权并查集)

    A Bug's Life Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  5. HDU 1829/POJ 2492 A Bug's Life

    A Bug's Life Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  6. hdu 5652 India and China Origins 并查集

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5652 题目大意:n*m的矩阵上,0为平原,1为山.q个询问,第i个询问给定坐标xi,yi,表示i年后这 ...

  7. HDU 5458 Stability (树链剖分+并查集+set)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5458 给你n个点,m条边,q个操作,操作1是删边,操作2是问u到v之间的割边有多少条. 这题要倒着做才 ...

  8. hdu 4619 Warm up 2(并查集)

    借用题解上的话,就是乱搞题.. 题意理解错了,其实是坐标系画错了,人家个坐标系,我给当矩阵画,真好反了.对于题目描述和数据不符的问题,果断相信数据了(这是有前车之鉴的hdu 4612 Warm up, ...

  9. hdu 5441 Travel 离线带权并查集

    Travel Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5441 De ...

随机推荐

  1. ionic 实现双击返回键退出应用功能

    ionic 实现双击返回键退出应用功能 keywords cordova,ngcordova,phonegap,ionic,双击,返回键,退出 例子 准备Toast插件,提示用,用户体验好点,不是必须 ...

  2. apple开发者账号申请

    1.  登陆appleID. 2. 进入 Your Account 3. 在Account Summary 中的MemberShips中选择第一个(界面大概如下) 4.选择后进入下图. 5. yes ...

  3. UIView的frame和bounds的含义

    1.frame是该view相对于父view的坐标系中的位置和大小.(参照点是父view的坐标系) 2.bounds是该view相对于自己的坐标.(参照点是本身坐标系统) 3.uiresponder&l ...

  4. 用include来处理模板的问题

    /** * 测试方法 */ protected function getHtml() { $tpl = $this->pageletDir.$this->plTemplate; $html ...

  5. ASP.NET母版页与内容页相对路径的问题

    1. 图片问题 图片显示问题:<img runat="server" src="~/images/ad468x60.gif" alt="&quo ...

  6. win8系统输入法设置

    Windows 8系统自带微软拼音简捷输入法,无论是在Windows的开始屏幕新界面中还是Windows传统桌面里,按Shift键或者直接点击屏幕上的"中/英"标识即可切换中英文输 ...

  7. 【leetcode】Contains Duplicate & Rectangle Area(easy)

    Contains Duplicate Given an array of integers, find if the array contains any duplicates. Your funct ...

  8. (转)Android: NDK编程入门笔记

    转自: http://www.cnblogs.com/hibraincol/archive/2011/05/30/2063847.html 为何要用到NDK? 概括来说主要分为以下几种情况: 1. 代 ...

  9. UVA 11181 dfs 概率

    N friends go to the local super market together. The probability of their buying something from them ...

  10. C Primer Plus之文件输入/输出

    文件 一个文件通常就是磁盘上的一段命名的存储区.但对于操作系统来说,文件就会更复杂一些.例如,一个大文件可以存储在一些分散的区段中,或者还会包含一些使操作系统可以确定其文件类型的附加数据. C将文件看 ...