擒贼先擒王
描述:
找团伙的个数,如果1和2是团伙,2和3是团伙,那么1和3也是团伙。
输入:
第一行n m,n表示强盗的人数,m表示m条线索,接下来m行每行两个数a b,表示a和b是同伙。
输出:
不同团伙的个数。
样例输入:
10 9
1 2
3 4
5 2
4 6
2 6
8 7
9 7
1 6
2 4
样例输出:
3
程序代码:
#include<stdio.h> int f[1010]; int getf(int t);//找BOSS int main() { int m,n,sum; int i,a,b,boos1,boos2; while(scanf("%d%d",&n,&m)!=EOF) { sum=0; for(i=1;i<=n;i++) f[i]=i; for(i=1;i<=m;i++) { scanf("%d%d",&a,&b); boos1=getf(a); boos2=getf(b); if(boos1!=boos2) f[boos2]=boos1;//靠左原则 } for(i=1;i<=n;i++) if(f[i]==i) sum++; printf("%d\n",sum); } return 0; } int getf(int t) { if(f[t]==t) return t; f[t]=getf(f[t]); return f[t]; }