栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

7-1 愿天下有情人都是失散多年的兄妹 (25 分)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

7-1 愿天下有情人都是失散多年的兄妹 (25 分)

7-1 愿天下有情人都是失散多年的兄妹 (25 分)

输入样例
24
00001 M 01111 -1
00002 F 02222 03333
00003 M 02222 03333
00004 F 04444 03333
00005 M 04444 05555
00006 F 04444 05555
00007 F 06666 07777
00008 M 06666 07777
00009 M 00001 00002
00010 M 00003 00006
00011 F 00005 00007
00012 F 00008 08888
00013 F 00009 00011
00014 M 00010 09999
00015 M 00010 09999
00016 M 10000 00012
00017 F -1 00012
00018 F 11000 00013
00019 F 11100 00018
00020 F 00015 11110
00021 M 11100 00020
00022 M 00016 -1
00023 M 10012 00017
00024 M 00022 10013
9
00021 00024
00019 00024
00011 00012
00022 00018
00001 00004
00013 00016
00017 00015
00019 00021
00010 00011
输出样例
Never Mind
Yes
Never Mind
No
Yes
No
Yes
No
No
代码
#include 
#include 
#include 
using namespace std;
const int Inf=1e5+5;
int n,m;//结点数,测试样例数
bool flag;//标记情侣是否为近亲
vector v[Inf];//下标为人物编号,值为这个人的双亲结点的编号
char sex[Inf];//下标为人物编号,值表示这个人的性别
bool vis[Inf];//下标为人物编号,值表示这个人是否被访问过(是否是五代以内亲属)
void dfs(int info,int num){//num表示第几代,初始化为0
    //递归边界1:超过五代
    if (num == 4){
        return;
    }
    //如果结点info的父、母结点没有被访问过,则dfs之;反之则说明五代以内出现近亲,置flag为1
    for(int i=0;i> n;
    while(n--){
        int tinfo, tfatinfo, tmoninfo;
        char tsex;
        cin>>tinfo>>tsex>>tfatinfo>>tmoninfo;
        sex[tinfo]=tsex;//记录自身的性别
        if(tfatinfo!=-1)//-1不用保存,避免数据处理不当导致数组越界 
		{
			v[tinfo].push_back(tfatinfo);//保存父亲编号 
			sex[tfatinfo]='M';//记录父亲性别 
		}
		if(tmoninfo!=-1)
		{
			v[tinfo].push_back(tmoninfo);
			sex[tmoninfo]='F';
        }
    }
    //读入测试样例
    cin >> m;
    while(m--){
        int tinfo1, tinfo2;
        cin >> tinfo1 >> tinfo2;
        if(sex[tinfo1]==sex[tinfo2]){
            cout << "Never Mind" << endl;
        }else{
            memset(vis, 0, sizeof(vis));
            flag = 0;
            vis[tinfo1] = 1;
            vis[tinfo2] = 1;
            dfs(tinfo1, 0);
            dfs(tinfo2, 0);
            if(flag){
                cout << "No" << endl;
            }else{
                cout << "Yes" << endl;
            }
        }

    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/648216.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号