L2-016 愿天下有情人都是失散多年的兄妹
#include <bits/stdc++.h>
using namespace std;
#define int long long
using pii=pair<int,int>;
char sex[100005];
vector<int>tr[100005];
bool vis[100005];
bool flag;
void dfs(int x,int dep)
{
if(dep>5) return ;
vis[x]=1;
for(auto i:tr[x]){
if(!vis[i]){
dfs(i,dep+1);
}else{
flag=1;
}
}
}
void solve()
{
//思路:建完树以后,第一个人先把其五代内的亲戚都标记了一遍
//如果第二个人 遍历的时候再次走到这个已经被标记的亲戚,说明这是在其五代内,那就说明其不能结婚
//不用往lca(最近公共祖先)上想,因为你只需判断两人的五代亲戚中有无相同即可
int n; cin>>n;
for(int i=0;i<n;i++)
{
int id,fa,mu;
char xb;
cin>>id>>xb>>fa>>mu;
sex[id]=xb;
if(fa!=-1) tr[id].push_back(fa), sex[fa]='M';//因为也可能询问父母 所以需要记录
if(mu!=-1) tr[id].push_back(mu),sex[mu]='F';
}
int q; cin>>q;
while(q--)
{
int a,b;
cin>>a>>b;
if(sex[a]==sex[b]) cout<<"Never Mind\n";
else{
memset(vis,0,sizeof vis);
flag=0;
dfs(a,1);
dfs(b,1);
// cout<<flag<<" ";
if(flag ) cout<<"No\n";
else cout<<"Yes\n";
}
}
}
signed main()
{
int t=1;
//cin>>t;
while(t--) solve();
}
posted on 2025-04-06 16:12 swj2529411658 阅读(20) 评论(0) 收藏 举报
浙公网安备 33010602011771号