您的位置:首页 > Web前端

[POJ 2492] A Bug's Life [黑白染色]

2014-05-01 20:32 435 查看
有一些虫子,已知谁和谁是不同性别的,问有没有矛盾

可以使用扩展并查集

也可以先构造出整个图,然后黑白染色,看他是不是二分图,这里用的黑白染色

#include <cstdio>
#include <cstring>

using namespace std;

struct Node {
int fe,col;
};
struct Edge {
int t,ne;
};

bool ans;
int n,m,p;
Node a[2100];
Edge b[2000100];

void putedge(int x,int y) {
b[p].t=y;
b[p].ne=a[x].fe;
a[x].fe=p;
p++;
}
void dfs(int i,int c) {
if (a[i].col==-c) ans=false;
if (a[i].col!=0) return;
a[i].col=c;
c=-c;
for (int j=a[i].fe;j;j=b[j].ne) {
dfs(b[j].t,c);
}
}

int main() {
int t,tt,i,x,y;
ans=true;
scanf("%d",&t);
for (tt=1;tt<=t;tt++) {
memset(a,0,sizeof(a));
p=1;
scanf("%d%d",&n,&m);
for (i=0;i<m;i++) {
scanf("%d%d",&x,&y);
putedge(x,y);
putedge(y,x);
}
ans=true;
for (i=1;i<=n&&ans;i++) {
if (a[i].col==0) dfs(i,1);
}
printf("Scenario #%d:\n",tt);
if (ans) printf("No suspicious bugs found!\n");
else printf("Suspicious bugs found!\n");
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: