Friends
Friends
题目描述

输入格式

输出格式

样例 #1
样例输入 #1
2
3 2
1 2
2 3
10 12
1 2
3 1
3 4
5 4
3 5
4 6
5 2
2 1
7 1
1 2
9 10
8 9
样例输出 #1
3
7
分析
这道题大意就是通过输入两人间关系判断出朋友最多的数量,也是并查集的一道典型应用
代码实现
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int s[N];
int height[N];
int friends[N];
void init_set() {
for (int i = 1; i < N; i++) {
s[i] = i;
height[i] = 0;
friends[i] = 1;
}
}
int find_set(int x) {
if (x != s[x]) s[x] = find_set(s[x]);
return s[x];
}
void merge_set(int x, int y) {
x = find_set(x);
y = find_set(y);
if(x==y)return;
if (height[x] == height[y]) {
height[x] = height[x] + 1;
s[y] = x;
friends[x] += friends[y];
} else {
if (height[x] < height[y]) s[x] = y, friends[y] += friends[x];
else s[y] = x, friends[x] += friends[y];
}
}
int main() {
int t;
cin >> t;
while (t--) {
int n, m, ans = 0;
cin >> n >> m;
init_set();
while (m--) {
int a, b;
cin >> a >> b;
merge_set(a, b);
}
for (int i = 1; i <= n; i++)
ans = max(ans, friends[i]);
cout << ans << endl;
}
return 0;
}

浙公网安备 33010602011771号