{{{ #!cplusplus /* hdu1232 畅通工程,经典并查集 ymc 2008/09/28 题目大意: 有n个诚实,某些城市有道路连接,至少要再建多少条路,使得 所有道路都联通。 分析与解题思路: 经典并查集题目,合并m次后,统计有多少个集合。 */ #include using namespace std; const int N=1010; int p[N]; int n,m; void Merge(int x,int y) { int rx=x; int ry=y; while(p[rx]!=-1)//搜索x的树根 rx=p[rx]; while(p[ry]!=-1)//搜索y的树根 ry=p[ry]; int i=x; int t; while(p[i]!=-1)//压缩x { t=p[i]; p[i]=rx; i=t; } i=y; while(p[i]!=-1)//压缩y { t=p[i]; p[i]=rx; i=t; } if(ry!=rx)//合并 p[ry]=rx; return; } int main() { int x,y; while(scanf("%d",&n)!=EOF) { if(n==0) break; scanf("%d",&m); memset(p,-1,sizeof(p)); for(int i=0;i