这题其实很简单,每个人肯定都往上走,才能保证尽快赢,所以无非是看谁离根节点近,即深度小。。用并查集中的findset思想,不断找父节点一直到根节点来找深度就可以了。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define N 100007 int fa[N],n,cnt; void init()
{
for(int i=;i<=n;i++)
fa[i] = i;
} void findset(int x)
{
if(x != fa[x])
{
findset(fa[x]);
cnt++;
}
} int main()
{
int m,a,b,x,y,i;
while(scanf("%d%d",&n,&m)!=EOF && (n||m))
{
init();
for(i=;i<n-;i++)
{
scanf("%d%d",&a,&b);
fa[b] = a;
}
while(m--)
{
scanf("%d%d",&x,&y);
cnt = ;
findset(x);
int kx = cnt;
cnt = ;
findset(y);
int ky = cnt;
if(kx <= ky)
puts("lxh");
else
puts("pfz");
}
}
return ;
}