poj2492 A Bug's Life

题目链接:https://vjudge.net/problem/POJ-2492

简单题意:给定一些虫子和他们之间的交往关系,判断它们中是否有同性恋虫

设v[x]=0表示x和par[x]同性,v[x]=1异性,然后用带权并查集做就可以了,算是食物链的简化版(只有两个关系)

#include<cstdio>

int t,T,n,m,i,j,x,y,f;
int par[2010],v[2010];

int find(int x){ //*带权并查集模板 
	if (x!=par[x]) {
	  int u=par[x];
	  par[x]=find(par[x]);
	  v[x]=(v[x]+v[u])%2;
	}
	return par[x];
}

int main(){
	scanf("%d",&t); T=t;
	while (t--){
	  scanf("%d%d",&n,&m); f=0;
	  for (i=1;i<=n;i++){ 
	    v[i]=0; par[i]=i;
	  }
	  for (i=1;i<=m;i++){
	  	scanf("%d%d",&x,&y);
	  	int xx=find(x);int yy=find(y);
	  	if (xx==yy){
	  	  int d=(v[x]+v[xx]-v[y]+2)%2; //*
	  	  if (d==0) f=1;  //x,y同性 
		}
		else {
		  par[xx]=yy; v[xx]=(1+v[y]-v[x])%2; //*
		} 
	  }
	  if (f==1) printf("Scenario #%d:\nSuspicious bugs found!\n\n",T-t);	  
	  else printf("Scenario #%d:\nNo suspicious bugs found!\n\n",T-t);
	}
	return 0;
}

 

posted @ 2020-08-05 15:26  coastal_taipan  阅读(110)  评论(0)    收藏  举报