zoukankan      html  css  js  c++  java
  • 1094 The Largest Generation

    A family hierarchy is usually presented by a pedigree tree where all the nodes on the same level belong to the same generation. Your task is to find the generation with the largest population.

    Input Specification:

    Each input file contains one test case. Each case starts with two positive integers N (<) which is the total number of family members in the tree (and hence assume that all the members are numbered from 01 to N), and M (<) which is the number of family members who have children. Then M lines follow, each contains the information of a family member in the following format:

    ID K ID[1] ID[2] ... ID[K]
    
     

    where ID is a two-digit number representing a family member, K (>) is the number of his/her children, followed by a sequence of two-digit ID's of his/her children. For the sake of simplicity, let us fix the root ID to be 01. All the numbers in a line are separated by a space.

    Output Specification:

    For each test case, print in one line the largest population number and the level of the corresponding generation. It is assumed that such a generation is unique, and the root level is defined to be 1.

    Sample Input:

    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
    
     

    Sample Output:

    9 4

    题意:

    给出一个家谱图,找出这个家谱图中,人数最多的一代,以及这一代是第几代。

    思路:

    用map将父代与子代之间进行映射,然后进行层次遍历。层次遍历的时候,可以增加哨兵,方便记录层数。

    Code:

    #include<iostream>
    #include<vector>
    #include<map>
    #include<queue>
    
    using namespace std;
    
    int main() {
        int n, m;
        cin >> n >> m;
    
        map<int, vector<int> > mp;
        vector<int> son;
        for (int i = 0; i < m; ++i) {
            int f, cnt, s;
            cin >> f >> cnt;
            for (int j = 0; j < cnt; ++j) {
                cin >> s;
                son.push_back(s);
            }
            mp[f] = son;
            son.clear();
        }
    
        int count = 1, level = 1;
        int temp1 = 0, temp2 = 1;
        queue<int> q;
        q.push(1);
        q.push(0);
        while (q.size() > 1) {
            int f = q.front();
            q.pop();
            if (f == 0) {
                q.push(0);
                temp2 += 1;
                level = temp1 > count ? temp2 : level;
                count = temp1 > count ? temp1 : count;
                temp1 = 0;
            }
            if (mp.find(f) != mp.end()) {
                son = mp.find(f)->second;
                for (int i = 0; i < son.size(); ++i) {
                    q.push(son[i]);
                }
                temp1 += son.size();
            }
                
        }
    
        cout << count << " " << level << endl;
    
        return 0;
    }
    

      

    参考:

    https://blog.csdn.net/xiaolonggezte/article/details/80004392

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    Entity Framework 指定架构无效 错误:1052
    发送邮件
    VS2013打开项目 提示Asp.net4.5未在web服务器上注册 F5运行 启动不来 权限
    转:10款中小企业必备的开源免费安全工具
    Jmeter JDBC Request的sql语句不支持;号
    Jmeter JDBC Request 中文乱码问题
    Jmeter JDBC Connection Configuration 链接失败,提示Error preloading the connection pool
    转:JDBC Request使用方法
    转:isualvm远程监控Tomcat
    转:AppScan代理扫描app/H5安全测试
  • 原文地址:https://www.cnblogs.com/h-hkai/p/12617639.html
Copyright © 2011-2022 走看看