标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 20974 Accepted Submission(s): 10382
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #include <set> 6 #include <cmath> 7 using namespace std; 8 #define Max 1000+10 9 int per[Max]; 10 int n,m; 11 void init() 12 { 13 for(int i=1;i<=n;i++) 14 per[i]=i; 15 } 16 int find(int a) 17 { 18 if(a==per[a]) 19 return a; 20 /*int root=a,x=a,j; 21 while(root!=per[root]) root=per[root]; 22 while(x!=per[x]) 23 { 24 j=per[x]; 25 per[x]=root; 26 x=j; 27 }*/ 28 return per[a]=find(per[a]); 29 } 30 int unite(int a,int b) 31 { 32 a=find(a); 33 b=find(b); 34 if(a!=b) 35 per[a]=b; 36 return 0; 37 } 38 int main() 39 { 40 int t,a,b; 41 freopen("in.txt","r",stdin); 42 scanf("%d",&t); 43 while(t--) 44 { 45 int ans=0; 46 scanf("%d%d",&n,&m); 47 init(); 48 for(int i=1;i<=m;i++) 49 { 50 scanf("%d%d",&a,&b); 51 unite(a,b); 52 } 53 for(int i=1;i<=n;i++) 54 if(per[i]==i) 55 ans++; 56 printf("%d\n",ans); 57 } 58 }
How Many Tables(POJ 1213 求连通分量)
标签:
原文地址:http://www.cnblogs.com/a1225234/p/5181263.html