Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 27455 Accepted Submission(s): 13656
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 #include<queue> 7 #include<map> 8 #include<set> 9 #include<vector> 10 #include<cstdlib> 11 #include<string> 12 #define eps 0.000000001 13 typedef long long ll; 14 typedef unsigned long long LL; 15 using namespace std; 16 const int N=1000+100; 17 int parent[N]; 18 int find(int x){ 19 int r=x; 20 while(r!=parent[r])r=parent[r]; 21 int i=x; 22 int j; 23 while(parent[i]!=r){ 24 j=parent[i]; 25 parent[i]=r; 26 i=j; 27 } 28 return r; 29 } 30 void Union(int x,int y){ 31 x=find(x); 32 y=find(y); 33 if(x<y)parent[x]=y; 34 else if(x>y)parent[y]=x; 35 if(x==y)return; 36 } 37 int main(){ 38 int t; 39 scanf("%d",&t); 40 while(t--){ 41 int n,m; 42 int x,y; 43 cin>>n>>m; 44 for(int i=1;i<=n;i++)parent[i]=i; 45 for(int i=1;i<=m;i++){ 46 cin>>x>>y; 47 Union(x,y); 48 } 49 int ans=0; 50 for(int i=1;i<=n;i++){ 51 if(parent[i]==i)ans++; 52 } 53 cout<<ans<<endl; 54 } 55 }
原文:http://www.cnblogs.com/Aa1039510121/p/6443046.html