How Many Tables HDU
阿新 • • 發佈:2018-12-13
題意
某人過生日請朋友去吃飯。並不是所有的朋友都相互認識,相互認識的朋友坐在一桌,需要幾張桌子
思路
判斷有幾棵樹就行,一棵樹代表一桌
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn=30005; int pre[maxn]; int find(int x) { if(pre[x]==x) return x; else return pre[x]=find(pre[x]); } void join(int x,int y) { x=find(x),y=find(y); if(x!=y) { pre[y]=x; } } int main() { int n,m,t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) pre[i]=i; for(int i=1;i<=m;i++) { int x,y; scanf("%d%d",&x,&y); join(x,y); } int cnt=0; for(int i=1;i<=n;i++) //查詢樹的個數 if(find(i)==i) cnt++; printf("%d\n",cnt); } return 0; }