题目链接:点击打开链接
题目大意:略。
解题思路:
- 递归向前五代找两个人有没有同一个祖先。
- 父母的性别需要设置!(父母可能离婚,所以也可能属于情人)
AC 代码
usingnamespacestd; typedeflonglongll; constintmaxn=1e5+10; structnode{ charsex; }man[maxn]; intfarr[maxn], morr[maxn]; intfindx(inta,intb,intcnt) { if(a==-1||b==-1) return1; if(morr[a]!=-1&&morr[a]==morr[b] ||farr[a]!=-1&&farr[a]==farr[b]) return0; if(++cnt>=4) return1; // 为什么等于4? 模拟一下即可returnfindx(morr[a],morr[b],cnt) &&findx(farr[a],farr[b],cnt) &&findx(farr[a],morr[b],cnt) &&findx(morr[a],farr[b],cnt); } intmain() { mem(farr,-1), mem(morr,-1); intn,q; intchild, a, b; scanf("%d",&n); for(inti=0;i<n;i++) { cin>>child; cin>>man[child].sex>>a>>b; if(a!=-1) man[a].sex='M'; if(b!=-1) man[b].sex='F'; farr[child]=a; morr[child]=b; } scanf("%d",&q); while(q--) { cin>>a>>b; if(man[a].sex==man[b].sex) puts("Never Mind"); elseif(findx(a,b,0)) puts("Yes"); elseputs("No"); } return0; }