PTA:7-106 愿天下有情人都是失散多年的兄妹 (25分)(bfs,dfs)
7-106 愿天下有情人都是失散多年的兄妹 (25分)
呵呵。大家都知道五服以內不得通婚,即兩個人最近的共同祖先如果在五代以內(即本人、父母、祖父母、曾祖父母、高祖父母)則不可通婚。本題就請你幫助一對有情人判斷一下,他們究竟是否可以成婚?
輸入格式:
輸入第一行給出一個正整數N(2 ≤ N ≤10000),隨后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
剛開始我首先想到的bfs進行搜索,構成一個樹,本人相當于根節點,向下就行搜索其父母,對出現的進行標記即可:
bsf AC代碼:(注意代碼中標記的坑)
通過后,感覺自己寫的代碼不是很好,上網搜了一下,發現用dfs的方法也很方便,下面給出dfs AC代碼:
#include <bits/stdc++.h> using namespace std;vector<int> vec[100000];//存關系圖 bool vis[100000];//標記五服以內的親屬 char sex[100000];//記錄性別 bool flag;//標記情侶是否為近親 void Dfs(int x,int num)//num表示第幾代,從0開始 {if(num>=4) return; //超過五代直接退出 for(int i=0;i<vec[x].size();i++){if(!vis[vec[x][i]]){vis[vec[x][i]]=1;//標記出現的人 Dfs(vec[x][i],num+1); }else flag=1;//五服之內出現一樣的人 } } int main() {int T;cin>>T;while(T--){int t,fa,ma;char ch;cin>>t>>ch>>fa>>ma;sex[t]=ch;if(fa!=-1){ //-1不用保存,避免數據處理不當導致數組越界 vec[t].push_back(fa);//保存雙親 sex[fa]='M';//記錄父親性別 }if(ma!=-1){vec[t].push_back(ma);sex[ma]='F';}}cin>>T;while(T--){int x,y;cin>>x>>y; if(sex[x]==sex[y]) cout<<"Never Mind"<<endl; //同性 else{memset(vis,0,sizeof(vis)); vis[x]=1; vis[y]=1;flag=0;Dfs(x,0);Dfs(y,0);if(flag)//被標記過說明這兩人為近親 cout<<"No"<<endl;elsecout<<"Yes"<<endl;}}return 0; }貼出dfs參考博客:https://blog.csdn.net/sm20170867238/article/details/82118718
歡迎大家進行批評改正!!!
總結
以上是生活随笔為你收集整理的PTA:7-106 愿天下有情人都是失散多年的兄妹 (25分)(bfs,dfs)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Newcoder 156 B.托米的划分
- 下一篇: PAT L2-016. 愿天下有情人都是