C++:The Largest Generation

家系世系通常以族谱树表示,同一层的所有节点属于同一代。你的任务是找出人口最多的一代。

输入格式:

每个输入文件包含一个测试用例。每个测试用例首先包含两个正整数 NN(家族成员总数,<100<100,成员编号从 01 到 NN)和 MM(有子女的成员数,<N<N)。接下来 MM 行,每行给出一位成员及其子女信息,格式为:

复制代码
ID K ID[1] ID[2] ... ID[K]

其中 ID 为两位数字,表示成员编号;KK(>0>0)为子女数,后跟 KK 个两位数字的子女编号。为简化起见,根节点编号固定为 01。行内数字用空格分隔。

输出格式:

对于每个测试用例,输出一行,包括人口最多的世代人口数和该世代的层次编号。假设该世代唯一,根节点所在层次编号为 1。

样例输入:

复制代码
23 13
21 1 23
01 4 03 02 04 05
03 3 06 07 08
06 2 12 13
13 1 21
08 2 15 16
02 2 09 10
11 2 19 20
17 1 22
05 1 11
07 1 14
09 1 17
10 1 18

样例输出:

复制代码
9 4
cpp 复制代码
#include <iostream>
#include <bits/stdc++.h>
#include <cstring>
#include <iomanip>
using namespace std;
int main(){
ios::sync_with_stdio(0); //加速
    cin.tie(0);
	cout.tie(0);
    int n,m;cin>>n>>m;
    map<string,vector<string>> mp;
    for(int i=0;i<m;++i){
        string id;int k;cin>>id>>k;
        for(int j=0;j<k;++j){
            string u;cin>>u;
            mp[id].push_back(u);
        }
    }
    if(n==1){
        cout<<1<<" "<<1<<endl;
        return 0;
    }
    string root="01";
    queue<string> q;
    q.push(root);
    int maxx=0;
    vector<int> ans;
    int high=0;
    int h=0;
    ans.push_back(1);
    while(!q.empty()){
        int sum=0;
        int len=q.size();
        for(int i=0;i<len;++i){
                string t=q.front();
                q.pop();
                sum+=mp[t].size();
                for(string x:mp[t]){
                q.push(x);
            }
        }
        if(sum>0){
            ans.push_back(sum);
            if(sum>maxx)maxx=sum;
        }
    }
    int pos=-1;
    for(int i=0;i<ans.size();++i){
        if(ans[i]==maxx){
            pos=i+1;break;;
        }
    }
    cout<<maxx<<" "<<pos<<endl;
    return 0;
}
相关推荐
范什么特西2 分钟前
计算机杂记
java
RyFit10 分钟前
SpirngAI
java
庞轩px16 分钟前
第六篇:Spring用了哪些设计模式?——从单例到代理,拆解框架中的经典设计
java·spring·设计模式·bean·代理模式·aop·单例
神仙别闹20 分钟前
基于 C# OpenPGP 的文件管理系统
开发语言·c#
汉克老师21 分钟前
GESP6级C++考试语法知识(四、图与树(四))
c++·贪心算法·优先队列·哈夫曼编码·哈夫曼树·gesp6级·gesp六级
番石榴AI36 分钟前
纯 CPU 推理!0.1B 超轻量级端到端OCR模型,使用 Java 进行文档解析
java·开发语言·ocr
likerhood39 分钟前
ConcurrentHashMap详细讲解(java)
java·开发语言·性能优化
机器学习之心1 小时前
集成BWM法、熵权法、改进博弈论组合赋权与三角直觉模糊云模型的多属性评价模型,MATLAB代码
开发语言·matlab·熵权法·三角直觉模糊云模型·bwm法·改进博弈论组合赋权·多属性评价模型
子兮曰1 小时前
whisper.cpp 深度解析:从边缘设备到实时语音识别
前端·c++·后端
特种加菲猫1 小时前
二叉搜索树:数据世界的“快速寻路指南”
开发语言·c++