日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

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

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

題目描述

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

輸入格式

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

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

輸出格式

對每一對有情人,判斷他們的關系是否可以通婚:如果兩人是同性,輸出Never Mind;如果是異性并且關系出了五服,輸出Yes;如果異性關系未出五服,輸出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

分析

**此題需要設計一個結構包括個人的性別以及其父母的id號(默認為-1)。
之后每次輸入都要把個人及其父母的性別關聯起來。
在查找的過程中需要每次把st[]重置,同時對a的祖輩進行dfs(),遍歷到的點標記為true.
之后對b同樣進行5代之內的dfs,如果此時b的長輩有標記為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; }

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。