题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213
题意就是 给出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; }
hdu 1213 How Many Tables(简单并查集)
猜你喜欢
转载自blog.csdn.net/Evildoer_llc/article/details/82928722
今日推荐
周排行