hdu - 1829 A Bug's Life (并查集)&&poj - 2492 A Bug's Life && poj 1703 Find them, Catch them
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。
- #include <cstdio>
- const int maxn = ;
- int par[*maxn];
- void init(int n)
- {
- for(int i=;i<=n;i++)
- par[i]=i;
- }
- int find(int x)
- {
- return x==par[x]?x:par[x]=find(par[x]);
- }
- void unite(int x,int y)
- {
- x=find(x);
- y=find(y);
- if(x!=y) par[x]=y;
- }
- int main()
- {
- //freopen("a.txt","r",stdin);
- int t,n,m,a,b,j=;
- scanf("%d",&t);
- while(t--)
- {
- scanf("%d%d",&n,&m);
- init(n*);
- bool flag=;
- for(int i=;i<m;i++)
- {
- scanf("%d%d",&a,&b);
- if(find(a)==find(b)) flag=;
- else
- {
- unite(a+n,b);
- unite(a,b+n);
- }
- }
- printf("Scenario #%d:\n",j++);
- if(flag) printf("Suspicious bugs found!\n");
- else printf("No suspicious bugs found!\n");
- printf("\n");
- }
- return ;
- }
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,所以要保留所有的可能性。
- #include <cstdio>
- const int maxn = ;
- int par[maxn*];
- void init(int n)
- {
- for(int i=;i<=n;i++)
- {
- par[i]=i;
- }
- }
- int find(int x)
- {
- return x==par[x]?x:par[x]=find(par[x]);
- }
- void unite(int x,int y)
- {
- x=find(x);
- y=find(y);
- if(x!=y)
- {
- par[x]=y;
- }
- }
- int main()
- {
- // freopen("a.txt","r",stdin);
- int t,n,m,a,b;
- char s[];
- scanf("%d",&t);
- while(t--)
- {
- scanf("%d%d",&n,&m);
- init(n*);
- for(int i=;i<m;i++)
- {
- scanf("%s%d%d",s,&a,&b);
- if(s[]=='A')
- {
- if(find(a)==find(b)) printf("In the same gang.\n");
- else if(find(a)==find(b+n)) printf("In different gangs.\n"); //这里开始没想到 唉
- else printf("Not sure yet.\n");
- }
- else if(s[]=='D')
- {
- unite(a,b+n);
- unite(a+n,b);
- }
- }
- }
- return ;
- }
hdu - 1829 A Bug's Life (并查集)&&poj - 2492 A Bug's Life && poj 1703 Find them, Catch them的更多相关文章
- hdu 5458 Stability(树链剖分+并查集)
Stability Time Limit: 3000/2000 MS (Java/Others) Memory Limit: 65535/102400 K (Java/Others)Total ...
- [HDU 3712] Fiolki (带边权并查集+启发式合并)
[HDU 3712] Fiolki (带边权并查集+启发式合并) 题面 化学家吉丽想要配置一种神奇的药水来拯救世界. 吉丽有n种不同的液体物质,和n个药瓶(均从1到n编号).初始时,第i个瓶内装着g[ ...
- hdu 1829 A Bug's Life(并查集)
A Bu ...
- 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) To ...
- 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 ...
- hdu 5652 India and China Origins 并查集
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5652 题目大意:n*m的矩阵上,0为平原,1为山.q个询问,第i个询问给定坐标xi,yi,表示i年后这 ...
- HDU 5458 Stability (树链剖分+并查集+set)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5458 给你n个点,m条边,q个操作,操作1是删边,操作2是问u到v之间的割边有多少条. 这题要倒着做才 ...
- hdu 4619 Warm up 2(并查集)
借用题解上的话,就是乱搞题.. 题意理解错了,其实是坐标系画错了,人家个坐标系,我给当矩阵画,真好反了.对于题目描述和数据不符的问题,果断相信数据了(这是有前车之鉴的hdu 4612 Warm up, ...
- hdu 5441 Travel 离线带权并查集
Travel Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5441 De ...
随机推荐
- ionic 实现双击返回键退出应用功能
ionic 实现双击返回键退出应用功能 keywords cordova,ngcordova,phonegap,ionic,双击,返回键,退出 例子 准备Toast插件,提示用,用户体验好点,不是必须 ...
- apple开发者账号申请
1. 登陆appleID. 2. 进入 Your Account 3. 在Account Summary 中的MemberShips中选择第一个(界面大概如下) 4.选择后进入下图. 5. yes ...
- UIView的frame和bounds的含义
1.frame是该view相对于父view的坐标系中的位置和大小.(参照点是父view的坐标系) 2.bounds是该view相对于自己的坐标.(参照点是本身坐标系统) 3.uiresponder&l ...
- 用include来处理模板的问题
/** * 测试方法 */ protected function getHtml() { $tpl = $this->pageletDir.$this->plTemplate; $html ...
- ASP.NET母版页与内容页相对路径的问题
1. 图片问题 图片显示问题:<img runat="server" src="~/images/ad468x60.gif" alt="&quo ...
- win8系统输入法设置
Windows 8系统自带微软拼音简捷输入法,无论是在Windows的开始屏幕新界面中还是Windows传统桌面里,按Shift键或者直接点击屏幕上的"中/英"标识即可切换中英文输 ...
- 【leetcode】Contains Duplicate & Rectangle Area(easy)
Contains Duplicate Given an array of integers, find if the array contains any duplicates. Your funct ...
- (转)Android: NDK编程入门笔记
转自: http://www.cnblogs.com/hibraincol/archive/2011/05/30/2063847.html 为何要用到NDK? 概括来说主要分为以下几种情况: 1. 代 ...
- UVA 11181 dfs 概率
N friends go to the local super market together. The probability of their buying something from them ...
- C Primer Plus之文件输入/输出
文件 一个文件通常就是磁盘上的一段命名的存储区.但对于操作系统来说,文件就会更复杂一些.例如,一个大文件可以存储在一些分散的区段中,或者还会包含一些使操作系统可以确定其文件类型的附加数据. C将文件看 ...