用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c++代码库

家谱处理

2017-11-13 作者:芙蓉妹妹举报

[c++]代码库

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n, m, i, cn = 0;
    cin>>n>>m;
    getchar();
    map<string, string> mf;
    vector<string> last(110);  //预先分配好110的大小
    string name, a, b, c, d;;
    for(i = 0; i < n; i++)
    {
        getline(cin, name);
        cn = count(name.begin(), name.end(), ' ');  //计算空格的数量
        name = name.substr(cn);
        if(cn)
        {

            mf[name] = last[cn / 2 - 1];  //记录上一个父节点
            last[cn / 2] = name;
        }
        else
        {
            mf[name] = "root";
            last[0] = name;
        }
    }
    for(i = 0; i < m; i++)
    {
        cin >> a >> d >> d >> b >> d >> c;
        if(b[0] == 'c')
        {
            if(mf[a] == c)
                cout<<"True"<<endl;
            else
             cout<<"False"<<endl;
        }
        else if(b[0] == 'p')
        {
            if(mf[c] == a)
                cout<<"True"<<endl;
            else
             cout<<"False"<<endl;
        }
        else if(b[0] == 's')
        {
            if(mf[c] == mf[a])
                printf("True\n");
            else
             cout<<"False"<<endl;
        }
        else if(b[0] == 'a')
        {
            while(mf[c] != a && mf[c] != "root") c = mf[c];
            if(mf[c] == "root")
                cout<<"False"<<endl;
            else
            cout<<"True"<<endl;
        }
        else if(b[0] == 'd')
        {
            while(mf[a] != c && mf[a] != "root") a = mf[a];
            if(mf[a] == "root")
                cout<<"False"<<endl;
            else
            cout<<"True"<<endl;
        }
    }
    return 0;
}


分享到:
更多

网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。