直接搜就是了,一个点向根出发,到的每个都记录一下,然后另一个点再搜,第一个被标记的就是了。
#include <stdio.h>
#include <stdlib.h>
int p[1000001];
int time[1000001];
void srch(int i)
{
while(i != 1){
time[i] = 1;
i = p[i];
}
time[i] = 1;
}
int main(int argc, char **argv)
{
int i, n;
int a, b;
scanf("%d", &n);
for(i = 1; i < n; i++){
scanf("%d%d", &a, &b);
p[b] = a;
}
scanf("%d%d", &a, &b);
srch(a);
i = b;
while(!time[i]){
i = p[i];
}
printf("%d\n", i);
return 0;
}