zoukankan      html  css  js  c++  java
  • L2-030 冰岛人 (25 分)

    题目保证不存在两个人是同名的。

    找最近公共祖先使用向上标记法。

    const int N=10010;
    unordered_map<string,string> fa;
    unordered_map<string,bool> sex;
    int n,m;
    
    bool check(string a,string b)
    {
        unordered_map<string,int> vis;
        for(int i=1;a != "";i++)
        {
            vis[a]=i;
            a=fa[a];
        }
    
        for(int i=1;b != "";i++)
        {
            if(vis[b]) return vis[b] >= 5 && i >= 5;  // 两人的公共祖先必须比任何一方的曾祖父辈分高
            b=fa[b];
        }
        return true;  // vis[b]的值均为0, 说明两人不存在公共祖先, 
    }
    
    int main()
    {
        cin>>n;
    
        for(int i=0;i<n;i++)
        {
            string fname,lname;
            cin>>fname>>lname;
            if(lname.back() == 'm') sex[fname]=true;
            else if(lname.back() == 'f') sex[fname]=false;
            else if(lname.substr(lname.size()-4) == "sson")
            {
                sex[fname]=true;
                fa[fname]=lname.substr(0,lname.size()-4);
            }
            else
            {
                sex[fname]=false;
                fa[fname]=lname.substr(0,lname.size()-7);
            }
        }
    
        cin>>m;
        while(m--)
        {
            string a,b,c,d;
            cin>>a>>b>>c>>d;
            if(sex.count(a) == 0 || sex.count(c) == 0)
                puts("NA");
            else if(sex[a] == sex[c])
                puts("Whatever");
            else if(check(a,c))
                puts("Yes");
            else
                puts("No");
        }
        //system("pause");
        return 0;
    }
    
  • 相关阅读:
    nginx 负载均衡
    nginX 安装 启动
    nginx 简介
    使用ASDM 管理 ciscoASA设备
    OSPF配置实验(一)
    VRRP
    HSRP 详解
    Rip 动态路由协议
    配置ASA防火墙 远程管理方式
    Oracle 重启监听
  • 原文地址:https://www.cnblogs.com/fxh0707/p/14691811.html
Copyright © 2011-2022 走看看