(Relax 并查集1.1)POJ 2492 A Bug's Life(并查集的基本使用)
2013-11-24 20:43
531 查看
判断bug中是否有guy。。。。。。。。。。
用n和n+max表示逻辑正反两反面,两个同一集合内的两个都小于max代表有相同,一个小于一个大于代表不同
#include <iostream>
using namespace std;
const int maxn = 10010;
int pre[2*maxn];
int n,m;
int p1,p2;
int total;
int find(int x){
int i,j,r;
r = x;
while(r != pre[r]){
r = pre[r];
}
i = x;
while(i != r){
j = pre[i];
pre[i] = r;
i = j;
}
return r;
}
void join(int x , int y){
int fx = find(x);
int fy = find(y);
if(fx != fy){
pre[fx] = fy;
--total;//不要放在外面。因为有一种输入是(1 2) (1 2),这样的话total就减重复了
}
}
int main(){
int t;
scanf("%d",&t);
int counter = 1;
while(t--){
int i;
for(i = 0 ; i < 2*maxn ; ++i){
pre[i] = i;
}
scanf("%d%d",&n,&m);
bool flag = true;
for(i = 0 ; i < m ; ++i){
int a,b;
scanf("%d%d",&a,&b);
if(find(a) == find(b)){
flag = false;
}else{
join(a,b+maxn);
join(a+maxn,b);
}
}
printf("Scenario #%d:\n",counter++);
// printf(flag?"No suspicious bugs found!\n\n":"Suspicious bugs found!\n\n");
if(flag){
printf("No suspicious bugs found!\n\n");
}else{
printf("Suspicious bugs found!\n\n");
}
}
return 0;
}
用n和n+max表示逻辑正反两反面,两个同一集合内的两个都小于max代表有相同,一个小于一个大于代表不同
#include <iostream>
using namespace std;
const int maxn = 10010;
int pre[2*maxn];
int n,m;
int p1,p2;
int total;
int find(int x){
int i,j,r;
r = x;
while(r != pre[r]){
r = pre[r];
}
i = x;
while(i != r){
j = pre[i];
pre[i] = r;
i = j;
}
return r;
}
void join(int x , int y){
int fx = find(x);
int fy = find(y);
if(fx != fy){
pre[fx] = fy;
--total;//不要放在外面。因为有一种输入是(1 2) (1 2),这样的话total就减重复了
}
}
int main(){
int t;
scanf("%d",&t);
int counter = 1;
while(t--){
int i;
for(i = 0 ; i < 2*maxn ; ++i){
pre[i] = i;
}
scanf("%d%d",&n,&m);
bool flag = true;
for(i = 0 ; i < m ; ++i){
int a,b;
scanf("%d%d",&a,&b);
if(find(a) == find(b)){
flag = false;
}else{
join(a,b+maxn);
join(a+maxn,b);
}
}
printf("Scenario #%d:\n",counter++);
// printf(flag?"No suspicious bugs found!\n\n":"Suspicious bugs found!\n\n");
if(flag){
printf("No suspicious bugs found!\n\n");
}else{
printf("Suspicious bugs found!\n\n");
}
}
return 0;
}
相关文章推荐
- poj-2492 -A Bug's Life-并查集的使用
- POJ 2492 || HDU 1829:A Bug's Life(并查集)
- POJ 2492 A Bug's Life 简单并查集
- HDU1829&POJ 2492 a bug's life [并查集||二分图染色]
- Hdu 1892&&Poj 2492 A Bug's Life[判断二分图 || 种类并查集]
- POJ - 2492 A Bug's Life(种类并查集)
- poj 2492 A Bug's Life(种类并查集)
- poj2492 A Bug's Life 种类并查集
- A Bug's Life(POJ - 2492)种类并查集
- POJ 2492 A Bug's Life(关系并查集)
- poj 2492 A Bug's Life(并查集)分组并查集
- poj 2492 A Bug's Life(带权并查集)
- POJ2492 A Bug's Life (并查集)
- POJ 2492 A Bug's Life(并查集)
- poj 2492 A Bug's Life(并查集)
- POJ 2492/hdu 1829 A Bug's Life【带权并查集】
- POJ 2492 A Bug's Life(并查集)
- POJ 2492 A Bug's Life (并查集)
- POJ2492 A Bug's Life (并查集)
- hdu 1829 &poj 2492 A Bug's Life(推断二分图、带权并查集)