哈哈哈哈,父母也是情人,我也是醉了。。。。。。
#include<iostream>
#include<cstring>
using namespace std;
int n,a[100001][4];
int k,b[100001][2];
int r[100001];
int dfs(int i,int e,int f);
int max(int e,int f,int g,int h)
{
int nn[4]={e,f,g,h};
int max=-1;
for(int i=0;i<4;i++)
{
if(nn[i]>max){
max = nn[i];
}
}
return max;
}
int main()
{
cin>>n;
char c;
int h;
memset(a,-1,sizeof(a));
for(int i=0;i<n;i++)
{
cin>>h;
a[h][0]=h;
cin>>c>>a[h][2]>>a[h][3];
a[a[h][2]][1]=1;
a[a[h][3]][1]=2;
if(c=='M')
{
a[h][1]=1;
}
else
{
a[h][1]=2;
}
}
// cout<<a[10][1]<<" "<<a[11][1]<<endl;
cin>>k;
for(int i=0;i<k;i++)
{
cin>>b[i][0]>>b[i][1];
if(a[b[i][0]][1]==a[b[i][1]][1])
{
r[i]=1;//never mind
}
else
{
int ta=b[i][0];
int tb=b[i][1];
r[i]=dfs(0,b[i][0],b[i][1]);
}
}
for(int i=0;i<k;i++)
{
switch (r[i])
{
case 1:cout<<"Never Mind"<<endl;break;
case 0:cout<<"Yes"<<endl;break;
case 2:cout<<"No"<<endl;break;
}
}
return 0;
}
int dfs(int i,int e,int f)
{
if(e==-1||f==-1)
{
return 0;
}
if((a[e][2]!=-1&&a[e][2]==a[f][2])||(a[e][3]!=-1&&a[e][3]==a[f][3]))
{
// cout<<"in"<<i<<":"<<a[e][2]<<" "<<a[f][2]<<"==="<<a[e][3]<<" "<<a[e][3]<<endl;
return 2;
}
if(i>=3)
{
return 0;
}
i++;
return max(dfs(i,a[e][2],a[f][2]),dfs(i,a[e][3],a[f][3]),dfs(i,a[e][2],a[f][3]),dfs(i,a[e][3],a[f][2]));
}