(模板題)How Many Tables
阿新 • • 發佈:2018-11-25
問題描述:
給n個人分配桌子,要求在一個桌子上只能有認識的人,然後給出了m中關係,求需要多少張桌子;
並查集:假設剛開始需要cnt=n張桌子,沒合併一次,cnt減一,最後cnt的值就是答案;
初始化+查詢+合併;
#include<iostream> using namespace std; const int maxn=1010; int T; int n,m,cnt; int maze[maxn]; void init() { for(int i=0;i<maxn;i++) maze[i]=i; } int my_find(int x) { return x==maze[x]? x : my_find(maze[x]); } void my_union(int i,int j) { int x=my_find(i); int y=my_find(j); if(x!=y) { maze[x]=y; cnt--; } } int main() { cin>>T; int p,q; while(T--) { init(); cin>>n>>m; cnt=n; for(int i=0;i<m;i++) { cin>>p>>q; my_union(p,q); } cout<<cnt<<endl; } return 0; }