hdu1213 并查集不压缩
Posted a_clown_cz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu1213 并查集不压缩相关的知识,希望对你有一定的参考价值。
题意:题意:一个人请人吃饭,相互认识的朋友在一张桌子,相互认识的朋友的意思是如果A认识B,B认识C,那么A、B、C是朋友,对于每组输入输出桌子的张数。
Sample Input
2 5 3 1 2 2 3 4 5 5 1 2 5
Sample Output
2 4
代码:
#include<iostream> #include<cstdio> using namespace std; int a[1005]; int Find(int k){ if(a[k]!=k) a[k]=Find(a[k]); return a[k]; } int Union(int aa,int bb){ return a[aa]=bb; } int main(){ int T,n,m,x,y; cin>>T; while(T--){ int ans=0; cin>>n>>m; for(int i=1; i<=n; i++) a[i]=i; for(int i=1; i<=m; i++){ cin>>x>>y; int p=Find(x); int q=Find(y); if(p!=q) Union(p,q); } for(int i=1; i<=n; i++) if(a[i]==i) ans++; cout<<ans<<endl; } return 0; }
以上是关于hdu1213 并查集不压缩的主要内容,如果未能解决你的问题,请参考以下文章
HDU 1213 How Many Tables(模板——并查集)