天梯賽 願天下有情人都是失散多年的兄妹(DFS

2021-08-15 03:27:16 字數 1135 閱讀 7238

一開始做的時候一直卡在17分,怎麼看都覺得沒有問題,最後看了別人部落格才知道,竟然還會詢問某人的父母和其他人的父母可否結婚(當然是選擇原諒ta啦)。。。。像我這樣純潔的小孩子根本就考慮不到啊。。。

所以,在輸入父母的序號時也需將性別標記上。

題目說要保證5代之間沒有血緣關係,那麼可以先找其中一人的5代並都進行標記,再找第二個人的5代,若第二個人的5代中有已經被標記的,那麼說明他們不可以結婚。

此題的抽象模型類似於一顆二叉樹。

#include 

#include

#include

#include

#include

#include

using

namespace

std;

struct peopeo[10011];

int fpre[10015], mpre[10015];

int vis1[10015];

bool flag = true;

void dfs(int f1,int m1,int cnt)

if(m1 != -1)

if(f1 != -1)

dfs(fpre[f1], mpre[f1],cnt+1); // 父親的父母

if(m1 != -1)

dfs(fpre[m1], mpre[m1],cnt+1); // 母親的父母

}int main()

int ask;

cin >> ask;

while(ask--)

flag = true;

memset(vis1,0,sizeof(vis1));

int f1 = fpre[id1], m1 = mpre[id1];

int f2 = fpre[id2], m2 = mpre[id2];

dfs(f1,m1,1); // 除去本人這一代,所以從1開始

dfs(f2,m2,1);

if(flag)

cout

<<"yes"

<< endl;

else

cout

<<"no"

<< endl;

}return

0;}

天梯賽 願天下有情人都是失散多年的兄妹 題解

7 42 願天下有情人都是失散多年的兄妹 呵呵。大家都知道五服以內不得通婚,即兩個人最近的共同祖先如果在五代以內 即本人 父母 祖父母 曾祖父母 高祖父母 則不可通婚。本題就請你幫助一對有情人判斷一下,他們究竟是否可以成婚?輸入格式 輸入第一行給出乙個正整數n 2 n 10 4 隨後n行,每行按以下...

願天下有情人都是失散多年的兄妹

呵呵。大家都知道五服以內不得通婚,即兩個人最近的共同祖先如果在五代以內 即本人 父母 祖父母 曾祖父母 高祖父母 則不可通婚。本題就請你幫助一對有情人判斷一下,他們究竟是否可以成婚?輸入第一行給出乙個正整數n 2 le n le 10 4 1 0 4 隨後n行,每行按以下格式給出乙個人的資訊 本人i...

願天下有情人都是失散多年的兄妹

呵呵。大家都知道五服以內不得通婚,即兩個人最近的共同祖先如果在五代以內 即本人 父母 祖父母 曾祖父母 高祖父母 則不可通婚。本題就請你幫助一對有情人判斷一下,他們究竟是否可以成婚?輸入第一行給出乙個正整數n 2 n 10 4 隨後n行,每行按以下格式給出乙個人的資訊 本人id 性別 父親id 母親...