为什么这样写会wa一个点
#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5;
int n,m,root;
int read(){
int x=0,f=1;char c=getchar();
while(!isdigit(c)) c=='-'?(f=-1,c=getchar()):c=getchar();
while(isdigit(c)) x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
void write(int x){
if(x>9) write(x/10);
putchar(x%10^48);
}
void print(int x) {x<0?(putchar('-'),write(-x)):write(x);}
struct node{int y,id;};
vector<node> que[N];
struct Edge{int to,next;}edge[N<<1];
int head[N],tot;
void add_edge(int x,int y) {edge[++tot]={y,head[x]};head[x]=tot;}
int fa[N];
int get(int x) {return fa[x]==x?x:fa[x]=get(fa[x]);}
int v[N],ans[N];
void tarjan(int x){
v[x]=1;
for(int i=head[x];i;i=edge[i].next){
int y=edge[i].to;
if(v[y]) continue;
tarjan(y);
fa[y]=get(x);
}
for(auto i:que[x]){
int y=i.y,id=i.id;
if(v[y]==2) ans[id]=get(y); //如果写成v[y]==1就ac了
}
v[x]=2;
}
signed main(){
n=read(),m=read(),root=read();
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1;i<n;i++){
int a=read(),b=read();
add_edge(a,b),add_edge(b,a);
}
for(int i=1;i<=m;i++){
int x=read(),y=read();
que[x].push_back({y,i});
que[y].push_back({x,i});
}
tarjan(root);
for(int i=1;i<=m;i++) print(ans[i]),puts("");
return 0;
}