hdu 1213 how many tables
并查集的简单应用,数组开了1010个,初始化却用到了set[1010];交了好几次,都是运行错误。
#include<iostream> using namespace std; int set[1020]; int find(int x) { int r= x; while(set[r] != r) r= set[r]; //int i =x; /*while(i!= r) { int j =set[i]; set[i] = r; i =j; }*/ return r; } void merge(int a,int b) { a= find(a); b= find(b); /*if(a< b)*/ if(a!= b) set[b] = a; //else set[a] = b; } int main() { int a; cin >> a; while(a--) { int count =0; for(int i =1;i<= 1010; i++)set[i] = i; int b,c; cin >> b>> c; while(c--) { int x,y; cin>> x>>y; merge(x,y); } for(int i =1; i<=b;i++) { if(set[i] == i) count++; } cout<< count<< endl; } return 0; }