并查集简单应用。和HDU 1232 一样。
代码如下:
1 #include<iostream> 2 3 using namespace std; 4 5 int set[1010]; 6 int cnt; 7 8 int find(int a) 9 { 10 int x=a; 11 while(x != set[x]) 12 x=set[x]; 13 return x; 14 } 15 16 void merge(int a, int b) 17 { 18 int x=find(a); 19 int y=find(b); 20 if (x!=y) 21 { 22 set[x]=y; 23 cnt--; 24 } 25 } 26 27 int main() 28 { 29 int a, b; 30 int n, m, i, T; 31 cin >> T; 32 while(T--) 33 { 34 cin >> n >> m; 35 cnt=n; 36 for (i=1; i<=n; i++) 37 set[i]=i; 38 for (i=0; i<m; i++) 39 { 40 cin >> a >> b; 41 merge(a, b); 42 } 43 cout << cnt << endl; 44 } 45 return 0; 46 }