当前位置:首页 > 题解目录 > 正文内容

【题解】家庭问题

亿万年的星光5个月前 (09-27)题解目录454

【题目描述】

有n个人,编号为1,2,……n,另外还知道存在K个关系。一个关系的表达为二元组(α,β)形式,表示α,β为同一家庭的成员。

当n,k和k个关系给出之后,求出其中共有多少个家庭、最大的家庭中有多少人?

例如:n=6,k=3,三个关系为(1,2),(1,3),(4,5)

此时,6个人组成三个家庭,即:{1,2,3}为一个家庭,{4,5}为一个家庭,{6}单独为一个家庭,第一个家庭的人数为最多。

【输入描述】

第一行为n,k二个整数(1≤n≤100)(用空格分隔);

接下来的k行,每行二个整数(用空格分隔)表示关系。

【输出描述】

二个整数(分别表示家庭个数和最大家庭人数)。

【样例输入】

6  3
1  2
1  3
4  5

【样例输出】

3 3




【题目分析】

  1. 并查集思路


【参考答案】


#include <bits/stdc++.h>

using namespace std;
int f[105];
int a[105];//结点下的孩子数量
int n, k, cnt, mx;

void init() {
    //由于从1编号的,所以for就不从0了
    for (int i = 1; i <= n; ++i) {
        f[i] = i;
    }
}

int find(int x) {
    if (f[x] == x)
        return x;
    //递归返回时,不断将根节点作为每一个结点的父亲
    return f[x] = find(f[x]);
}

//合并两个结点
void merge(int a, int b) {
    a = find(a);
    b = find(b);
    f[a] = b;
}

int main() {
    cin.tie(0);
    cin >> n >> k;
    init();
    for (int i = 0; i < k; ++i) {
        int x, y;
        cin >> x >> y;
        merge(x, y);
    }
    for (int i = 1; i <= n; ++i) {
        a[find(i)]++;
        if (f[i] == i) {
            //这是查根节点的数目,可以说明有几个家庭数
            cnt++;
        }
    }
    for (int i = 1; i <= n; ++i) {
        mx = max(mx, a[i]);
    }
    cout << cnt << " " << mx;
    return 0;
}



    扫描二维码推送至手机访问。

    版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

    分享给朋友:

    相关文章

    回文质数

    【题目描述】如果一个数从左边读和从右边读都是同一个数,就称为回文数。例如6886就是一个回文数,求出所有的既是回文数又是素数的三位数。【输入描述】无【输出描述】所有的既是回文数又是素数的三位数。一个数...

    【题解】最大平方因子

    【题目描述】给定一个整数 n,请找出 n 的最大平方因子。所谓平方因子,就是一个 n 的因子,且是一个完全平方数。最大平方因子就是 n&nb...

    字符串反连接

    【题目描述】写一函数,使输入的一个字符串按反序存放,在主函数中输入并输出反序后的字符串(不包含空格)。【输入描述】一行字符【输出描述】逆序后的字符串【样例输入】123456abcdef【样例输出】fe...

    【题解】大整数减法

    【题目描述】求两个大的正整数相减的差。【输入】共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。【输出】一行,即所求的差。【输入样例】9999...

    【题解】智力大冲浪

    【题目描述】小伟报名参加中央电视台的智力大冲浪节目。本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元。先不要太高兴!因为这些钱还不一定都是你的。接下来主持人宣布了比赛规则:首...

    【算法】最少步数

    【算法】最少步数

    【题目描述】在各种棋中,棋子的走法总是一定的,如中国象棋中马走“日”。有一位小学生就想如果马能有两种走法将增加其趣味性,因此,他规定马既能按“日”走,也能如象一样走“田”字。他的同桌平时喜欢下围棋,知...