hdu 1213 How Many Tables(簡單並查集)
阿新 • • 發佈:2018-12-13
題意就是 給出n對關係,假如A和B認識,B和C認識,那麼A和B認識。現在互相認識的人可以在一桌吃飯,不互相認識的人可以一桌吃飯,問需要多少張桌子
#pragma GCC optimize(2) #include<stdio.h> #include<algorithm> #include<string.h> #include<queue> using namespace std; const int maxn = 1050; const int inf = 0x3f3f3f3f; typedef long long ll; int f[maxn]; vector<int>vec; int t, n, m; int find(int x) { if (x == f[x]) { return f[x]; } else { return f[x] = find(f[x]); } } void vj(int u, int v) { int x = find(u); int y = find(v); if (x != y) { f[x] = y; } } int main() { //freopen("C://input.txt", "r", stdin); scanf("%d", &t); while (t--) { int cnt = 0; vec.clear(); for (int i = 0; i <= 1040; i++) { f[i] = i; } scanf("%d%d", &n, &m); for (int i = 1; i <= m; i++) { int u, v; scanf("%d%d", &u, &v); vj(u, v); } for (int i = 1; i <= n; i++) { if (find(i) == i) { cnt++; } } printf("%d\n", cnt); } return 0; }