HDU 1213 How Many Tables
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1213
思路:简单的并查集:
实现代码:
#include <iostream> #include <cstdio> using namespace std; const int maxn=1005; int par[maxn],rk[maxn]; void init(int n){ for(int i=1;i<=n;i++){ par[i]=i; rk[i]=0; } } int findfa(int u){ if(par[u]==u) return u; return par[u]=findfa(par[u]); } void unit(int u,int v){ u=findfa(u); v=findfa(v); if(u==v) return; if(rk[u]>rk[v]) par[v]=u; else{ par[u]=v; if(rk[u]==rk[u]) rk[v]++; } } int main(){ int T; scanf("%d",&T); while(T--){ int n,m; scanf("%d%d",&n,&m); init(n); for(int i=1;i<=m;i++){ int a,b; scanf("%d%d",&a,&b); unit(a,b); } int sum=0; for(int i=1;i<=n;i++) if(par[i]==i) sum++; printf("%d\n",sum); } }
自己选的路,跪着也要把它走完------ACM坑