标签:
HDU - 1213Time Limit: 1000MS | Memory Limit: 32768KB | 64bit IO Format: %I64d & %I64u |
Description
Input
Output
Sample Input
2 5 3 1 2 2 3 4 5 5 1 2 5
Sample Output
2 4题目目的很简单就是让你求有几个集合所以直接模板飘过/* Author: 2486 Memory: 1420 KB Time: 0 MS Language: G++ Result: Accepted */ #include <cstring> #include <string> #include <cstdio> #include <cmath> #include <algorithm> using namespace std; const int maxn=1000+5; int a,b,T,N,M,par[maxn],ranks[maxn]; void init(int sizes) { for(int i=1; i<=sizes; i++) { par[i]=i; ranks[i]=1; } } int find(int x) { return par[x]==x?x:par[x]=find(par[x]); } bool same(int x,int y) { return find(x)==find(y); } void unite(int x,int y) { x=find(x); y=find(y); if(x==y)return ; if(ranks[x]>ranks[y]) { par[y]=x; } else { par[x]=y; if(ranks[x]==ranks[y])ranks[x]++; } } int main() { scanf("%d",&T); while(T--) { scanf("%d",&N); scanf("%d",&M); init(N); for(int i=0; i<M; i++) { scanf("%d%d",&a,&b); unite(a,b); } int ans=0; for(int i=1; i<=N; i++) { if(par[i]==i)ans++; } printf("%d\n",ans); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/qq_18661257/article/details/47173935