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

来源:互联网 发布:sift python 编辑:程序博客网 时间:2024/05/16 14:32

有一些虫子,已知谁和谁是不同性别的,问有没有矛盾

可以使用扩展并查集

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

#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;}


0 0
原创粉丝点击