HDU 1829 A Bug's Life (并查集)
2015-01-17 20:51
288 查看
题目链接:请戳这里。
题目大意及思路:给定n个Bugs(shen me gui)和m对Bugs之间的关系,假定关系是两个Bugs的男女关系,那么问存不存在同性恋的情况。
那么若a与b是男女关系,b与c是男女关系,那么a和c的性别我们就可以认为是相同的。我们用可以建立两个并查集,一类放男男关系,一类放女女关系。
那么若男男关系中出现了环的情况(即有共同的根),那么同性恋关系就出现了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define N 2000+10
using namespace std;
int ok;
int f
,p
; //用p[]表示男女关系。
void Init(int n)
{
for(int i=1;i<=n;i++)
{
f[i]=i;
p[i]=0;
}
}
int Find(int x)
{
return x==f[x]?x:f[x]=Find(f[x]);
}
void Merge(int a,int b) //a和b有男女关系。
{
int ra=Find(a),rb=Find(b);
if(ra==rb) { //存在同性恋。
ok=0;
return;
}
if(p[ra]) f[p[ra]]=rb; //p[ra]和rb是同种关系(男男)
if(p[rb]) f[p[rb]]=ra; //p[rb]和ra是同种关系(女女)
p[ra]=rb;
p[rb]=ra;
}
int main()
{
int T,C=0;
scanf("%d",&T);
while(T--)
{
int n,m;
scanf("%d %d",&n,&m);
Init(n); ok=1;
for(int i=0;i<m;i++)
{
int a,b;
scanf("%d %d",&a,&b);
Merge(a,b);
}
printf("Scenario #%d:\n",++C);
if(ok) puts("No suspicious bugs found!");
else puts("Suspicious bugs found!");
puts("");
}
return 0;
}
题目大意及思路:给定n个Bugs(shen me gui)和m对Bugs之间的关系,假定关系是两个Bugs的男女关系,那么问存不存在同性恋的情况。
那么若a与b是男女关系,b与c是男女关系,那么a和c的性别我们就可以认为是相同的。我们用可以建立两个并查集,一类放男男关系,一类放女女关系。
那么若男男关系中出现了环的情况(即有共同的根),那么同性恋关系就出现了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define N 2000+10
using namespace std;
int ok;
int f
,p
; //用p[]表示男女关系。
void Init(int n)
{
for(int i=1;i<=n;i++)
{
f[i]=i;
p[i]=0;
}
}
int Find(int x)
{
return x==f[x]?x:f[x]=Find(f[x]);
}
void Merge(int a,int b) //a和b有男女关系。
{
int ra=Find(a),rb=Find(b);
if(ra==rb) { //存在同性恋。
ok=0;
return;
}
if(p[ra]) f[p[ra]]=rb; //p[ra]和rb是同种关系(男男)
if(p[rb]) f[p[rb]]=ra; //p[rb]和ra是同种关系(女女)
p[ra]=rb;
p[rb]=ra;
}
int main()
{
int T,C=0;
scanf("%d",&T);
while(T--)
{
int n,m;
scanf("%d %d",&n,&m);
Init(n); ok=1;
for(int i=0;i<m;i++)
{
int a,b;
scanf("%d %d",&a,&b);
Merge(a,b);
}
printf("Scenario #%d:\n",++C);
if(ok) puts("No suspicious bugs found!");
else puts("Suspicious bugs found!");
puts("");
}
return 0;
}
相关文章推荐
- HDU 1829 A Bug's Life(并查集)
- hdu 1829 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 (并查集)
- 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 (分组并查集)
- 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-基础种类并查集
- HDU 1829 A Bug's Life(并查集的应用)
- hdu 1829 A Bug's Life(带权并查集)
- HDU 1829 A Bug's Life【种类并查集】
- HDU 1829 && POJ 2492 A Bug's Life(种类并查集)
- HDU 1829 A Bug's Life(基础种类并查集)