Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 41138 Accepted Submission(s): 20555
1 #include<cstdio> 2 using namespace std; 3 const int maxn=1006; 4 int fa[maxn]; 5 bool flag[maxn]; 6 int n,m; 7 8 int find_fa(int op) 9 { 10 if(fa[op]==op) return op; 11 return fa[op]=find_fa(fa[op]); 12 } 13 14 int main() 15 { 16 int T; 17 while( ~scanf("%d",&T)){ 18 while(T--){ 19 scanf("%d%d",&n,&m); 20 for(int i=1;i<=n;i++){ 21 fa[i]=i; 22 flag[i]=false; 23 } 24 25 for(int i=1;i<=m;i++){ 26 int x,y; 27 scanf("%d%d",&x,&y); 28 int opx,opy; 29 opx=find_fa(x); 30 opy=find_fa(y); 31 if(opx<=opy) 32 fa[opy]=opx; 33 else 34 fa[opx]=opy; 35 } 36 int ans=0; 37 for(int i=1;i<=n;i++){ 38 int iop; 39 iop=find_fa(i); 40 if(!flag[iop]){ 41 flag[iop]=true; 42 ans++; 43 } 44 } 45 printf("%d\n",ans); 46 } 47 } 48 return 0; 49 }
原文:https://www.cnblogs.com/ZQUACM-875180305/p/9094197.html