A Bug's Life 種類並查集
阿新 • • 發佈:2019-01-28
就是種類並查集的一種,如果理解食物鏈的思想,這道題應該不是問題,都是用向量的思想理解,程式碼如下:
#include<stdio.h> struct node { int f; int r; } s[20010]; int find(int x) { int temp; if(x==s[x].f) return x; temp=s[x].f; s[x].f=find(temp); s[x].r=(s[x].r+s[temp].r)%2; return s[x].f; } int main() { int t,m,n,i; int x,y; int tot=1; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(i=1; i<=n; i++) { s[i].f=i; s[i].r=0; } bool flog=true; for(i=1; i<=m; i++) { scanf("%d%d",&x,&y); if(flog) { int rootx=find(x); int rooty=find(y); if(rootx==rooty) { if(s[x].r==s[y].r) flog=false; } else { s[rooty].f=rootx; s[rooty].r=(s[x].r+1-s[y].r+2)%2; } } } printf("Scenario #%d:\n",tot++); if(flog==false) printf("Suspicious bugs found!\n\n"); else printf("No suspicious bugs found!\n\n"); } }