个人认为这个题的测试数据有问题。
前边已经对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";}}