呵呵。大家都知道五服以內不得通婚,即兩個人最近的共同祖先如果在五代以內(即本人、父母、祖父母、曾祖父母、高祖父母)則不可通婚。本題就請你幫助一對有情人判斷一下,他們究竟是否可以成婚?
接下來給出乙個正整數k,隨後k行,每行給出一對有情人的id,其間以空格分隔。
思路:建立乙個結構體,用dfs來判斷父母是否是同乙個人,當兩人的父母中同時有一人不可考的時候,預設不是同一人。
#include
using
namespace std;
int n;
const
int maxn =
1e6+5;
struct node fml[maxn]
;int flag =0;
intdfs
(node a, node b,
int s)
if(a.fid !=-1
&& b.fid !=-1
) flag +
=dfs
(fml[a.fid]
, fml[b.fid]
, s +1)
;if(a.mid !=-1
&& b.fid !=-1
) flag +
=dfs
(fml[a.mid]
, fml[b.fid]
, s +1)
;if(a.fid !=-1
&& b.mid !=-1
) flag +
=dfs
(fml[a.fid]
, fml[b.mid]
, s +1)
;if(a.mid !=-1
&& b.mid !=-1
) flag +
=dfs
(fml[a.mid]
, fml[b.mid]
, s +1)
;return flag;
}int
main()
int k;
cin >> k;
for(
int i =
0; i < k; i++)if
(dfs
(fml[a]
, fml[b],0
))cout <<
"no"
<< endl;
else
cout <<
"yes"
<< endl;
flag =0;
//每次計算完都要把flag清空,以免計算出乙個no之後的全是no
}return
0;}
L2 016 願天下有情人都是失散多年的兄妹
呵呵。大家都知道五服以內不得通婚,即兩個人最近的共同祖先如果在五代以內 即本人 父母 祖父母 曾祖父母 高祖父母 則不可通婚。本題就請你幫助一對有情人判斷一下,他們究竟是否可以成婚?輸入第一行給出乙個正整數n 2 n 104 隨後n行,每行按以下格式給出乙個人的資訊 本人id 性別 父親id 母親i...
L2 016 願天下有情人都是失散多年的兄妹
時間限制 200 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 呵呵。大家都知道五服以內不得通婚,即兩個人最近的共同祖先如果在五代以內 即本人 父母 祖父母 曾祖父母 高祖父母 則不可通婚。本題就請你幫助一對有情人判斷一下,他們究竟是否可以成婚?...
L2 016 願天下有情人都是失散多年的兄妹
時間限制 200 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 呵呵。大家都知道五服以內不得通婚,即兩個人最近的共同祖先如果在五代以內 即本人 父母 祖父母 曾祖父母 高祖父母 則不可通婚。本題就請你幫助一對有情人判斷一下,他們究竟是否可以成婚?...