7-42 愿天下有情人都是失散多年的兄妹
个人认为这个题的测试数据有问题。
前边已经对sexs设置过初值,后边else语句不加过不了最后一个测试点,说明存在对一个人性别的反复修改。因为性别不同输出是不一样的。
ac代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 3e5+10;
int h[N],tot,vis[N];
bool sexs[N];
struct Edge{
int to,nxt;
}e[N];
void add(int from,int to)
{
e[tot].to = to, e[tot].nxt = h[from];
h[from] = tot ++ ;
}
bool dfs(int cnt,int u)
{
if(cnt==5) return false;
if(vis[u]) return true;
vis[u]=1;
for(int i=h[u]; ~i; i = e[i].nxt)
if (dfs(cnt + 1, e[i].to)) return 1;
return false;
}
int main()
{
memset(sexs, 0, sizeof sexs);
memset(h, -1, sizeof h); tot = 0;
int n;cin >> n;
for(int i = 0; i < n; ++i)
{
int u, fa, ma;
char sex;
cin >> u >> sex >> fa >> ma;
if(sex == 'F') sexs[u] = 1;
else sexs[u] = 0;
if(fa != -1) add(u, fa);
if(ma != -1) add(u, ma), sexs[ma] = 1;
}
int m; cin >> m;
while(m--)
{
memset(vis,0,sizeof vis);
int x,y; cin >> x >> y;
if(sexs[x] == sexs[y])
{
cout << "Never Mind\n";
continue;
}
dfs(0,x);
if(dfs(0,y)) cout << "No\n";
else cout << "Yes\n";
}
}