有一些虫子,已知谁和谁是不同性别的,问有没有矛盾
可以使用扩展并查集
也可以先构造出整个图,然后黑白染色,看他是不是二分图,这里用的黑白染色
#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;
}