zoukankan      html  css  js  c++  java
  • 家谱(gen)x

     
    家谱(gen)
    时间限制  2S
    【问题描述】
        现代的人对于本家族血统越来越感兴趣,现在给出充足的父子关系,请你编写程序找到某个人的最早的祖先。
    【输入格式】gen.in
      输入文件由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系由二行组成,用#name的形式描写一组父子关系中的父亲的名字,用+name的形式描写一组父子关系中的儿子的名字;接下来用?name的形式表示要求该人的最早的祖先;最后用单独的一个$表示文件结束。规定每个人的名字都有且只有6个字符,而且首字母大写,且没有任意两个人的名字相同。最多可能有1000组父子关系,总人数最多可能达到50000人,家谱中的记载不超过30代。
    【输出格式】gen.out
      按照输入文件的要求顺序,求出每一个要找祖先的人的祖先,格式:本人的名字+一个空格+祖先的名字+回车。
    一定要学会使用map!感觉超级好用!!!
     
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<map>
     5 
     6 using namespace std;
     7 
     8 int f[101];
     9 string fnow;//用于储存father's name,to add children's 节点
    10 map<string,string>p; //studying,还不太会用 
    11 string name;
    12 
    13 int main()
    14 {
    15     char a;
    16     while(cin>>a)
    17     {
    18         if(a=='$')
    19         break;
    20         if(a=='#')// cin>>父亲名字 
    21         {
    22             cin>>name;
    23             if(p[name].empty())
    24             p[name]=name;
    25             fnow=name;
    26         }
    27         if(a=='+')// cin>>孩子名字 
    28         {
    29             cin>>name;
    30             while(p[fnow]!=fnow)
    31             {
    32                 fnow=p[fnow];
    33             }
    34             p[name]=fnow;
    35         }
    36         if(a=='?')// 进行多次询问 
    37         {
    38             cin>>name;
    39             cout<<name<<" "<<p[name]<<endl;
    40         }    
    41     }
    42     return 0;
    43 }

    如果运气好也是错,那我倒愿意错上加错!

    ❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀

  • 相关阅读:
    Gym
    Gym
    Gym
    Gym
    Gym
    bzoj 2734: [HNOI2012]集合选数
    bzoj 1068: [SCOI2007]压缩
    HDU 2899 Strange fuction
    hihocoder #1142 : 三分·三分求极值
    HDU 2824 The Euler function
  • 原文地址:https://www.cnblogs.com/zxqxwnngztxx/p/6701523.html
Copyright © 2011-2022 走看看