交了 50 多发,全 RE,似乎是 define 的问题
#include<bits/stdc++.h>
#define F(i,j,n) for(ll i=j;i<=n;i++)
#define ll long long
#define Test ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;
const ll N=1e6+10;
ll n,m,k,x,y,u,v,w,cnt=0,t=0,l,r,len,T;
ll mini=INT_MAX,maxi=0,Mod;
string s1,s2;
ll f[N],ans[5000005],vis[N];
ll num[N];
vector<ll> tr[N];
vector<pair<ll,ll>> q[N];
ll find(ll x){
if(f[x]==x) return x;
return f[x]=find(f[x]);
}
void dfs(ll u){
vis[u]=1;
F(i,0,tr[u].size()-1){
if(!vis[tr[u][i]]){
dfs(tr[u][i]);
f[tr[u][i]]=u;
}
}
//换成 for(int i=0;i<q[u].size();i++) 不会 RE
F(i,0,q[u].size()-1){
ll v=q[u][i].first;
ll id=q[u][i].second;
if(vis[v]) num[id]=find(v);
}
}
int main(){
cin>>n>>m>>k;
F(i,1,n) f[i]=i;
F(i,1,n-1){
cin>>u>>v;
if(u==v) continue;
tr[u].push_back(v);
tr[v].push_back(u);
}
F(i,1,m){
cin>>u>>v;
q[u].push_back({v,i});
q[v].push_back({u,i});
}
dfs(k);
F(i,1,m) cout<<num[i]<<"\n";
return 0;
}