日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

L2-016 愿天下有情人都是失散多年的兄妹 (25分) C++

發(fā)布時(shí)間:2024/1/18 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 L2-016 愿天下有情人都是失散多年的兄妹 (25分) C++ 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目描述

呵呵。大家都知道五服以內(nèi)不得通婚,即兩個(gè)人最近的共同祖先如果在五代以內(nèi)(即本人、父母、祖父母、曾祖父母、高祖父母)則不可通婚。本題就請(qǐng)你幫助一對(duì)有情人判斷一下,他們究竟是否可以成婚?

輸入格式

輸入第一行給出一個(gè)正整數(shù)N(2 ≤ N ≤10^4),隨后N行,每行按以下格式給出一個(gè)人的信息:

本人ID 性別 父親ID 母親ID
其中ID是5位數(shù)字,每人不同;性別M代表男性、F代表女性。如果某人的父親或母親已經(jīng)不可考,則相應(yīng)的ID位置上標(biāo)記為-1。
接下來給出一個(gè)正整數(shù)K,隨后K行,每行給出一對(duì)有情人的ID,其間以空格分隔。
注意:題目保證兩個(gè)人是同輩,每人只有一個(gè)性別,并且血緣關(guān)系網(wǎng)中沒有亂倫或隔輩成婚的情況。

輸出格式

對(duì)每一對(duì)有情人,判斷他們的關(guān)系是否可以通婚:如果兩人是同性,輸出Never Mind;如果是異性并且關(guān)系出了五服,輸出Yes;如果異性關(guān)系未出五服,輸出No。

輸入樣例

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

分析

**此題需要設(shè)計(jì)一個(gè)結(jié)構(gòu)包括個(gè)人的性別以及其父母的id號(hào)(默認(rèn)為-1)。
之后每次輸入都要把個(gè)人及其父母的性別關(guān)聯(lián)起來。
在查找的過程中需要每次把st[]重置,同時(shí)對(duì)a的祖輩進(jìn)行dfs(),遍歷到的點(diǎn)標(biāo)記為true.
之后對(duì)b同樣進(jìn)行5代之內(nèi)的dfs,如果此時(shí)b的長輩有標(biāo)記為true的,說明a、b具有共同的祖先,輸出“No”,反之則為“Yes”
**

C++ 代碼

#include<bits/stdc++.h> using namespace std; const int N = 1e5+10; int n; struct people{int sex,father=-1,mother=-1; }peo[N]; bool st[N],flag; void dfs(int cur,int generation) {if(cur==-1) return;if(generation>5) return;st[cur]=1;dfs(peo[cur].father,generation+1);dfs(peo[cur].mother,generation+1); } void finddfs(int cur,int generation) {if(cur==-1) return;if(generation>5) return;if(st[cur]) flag=true;finddfs(peo[cur].father,generation+1);finddfs(peo[cur].mother,generation+1); } int main() {cin>>n;int id,father,mother;string sex;for(int i=0;i<n;i++){cin>>id>>sex;if(sex=="M") peo[id].sex=1;else peo[id].sex=0;cin>>peo[id].father>>peo[id].mother;peo[peo[id].father].sex=1;peo[peo[id].mother].sex=0; }cin>>n;int a,b;for(int i=0;i<n;i++){cin>>a>>b;if(peo[a].sex==peo[b].sex) puts("Never Mind");else{memset(st,false,sizeof st);dfs(a,1);flag=false;finddfs(b,1);if(flag) puts("No");else puts("Yes");}}return 0; }

總結(jié)

以上是生活随笔為你收集整理的L2-016 愿天下有情人都是失散多年的兄妹 (25分) C++的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。