1. 程式人生 > 實用技巧 >hdu1232暢通工程——並查集

hdu1232暢通工程——並查集

http://acm.hdu.edu.cn/showproblem.php?pid=1232

#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<stdlib.h>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#include<iomanip> 
using
namespace std; int x[1005]; int root(int i) { if(x[i]==i) return i; else return root(x[i]); } void lianjie(int a,int b) { int q1=root(a); int q2=root(b); if(q1!=q2) { if(q1>=q2) x[q1]=q2; else x[q2]=q1; } } int main() { int N,M;
while(cin>>N>>M) { for(int i=1;i<=N;i++) x[i]=i; for(int i=0;i<M;i++) { int a,b; cin>>a>>b; lianjie(a,b); } int sum=-1; for(int i=1;i<=N;i++) { if(x[i]==i) sum
++; } cout<<sum<<endl; } return 0; }