Friends

Friends

题目描述

PDF

输入格式

输出格式

样例 #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;
}

posted @ 2023-08-30 20:28  LongDz  阅读(15)  评论(0)    收藏  举报