WA0 求条

#define Code using
#define by namespace
#define stringdp100005 std
#include<bits/stdc++.h>
#define int long long
Code by stringdp100005;
int n,m,cnt,q; 
int fa[100005];
struct node{
	int u,v,w;
}a[100005];
struct node2{
	int v,w;
};
bool cmp(node x,node y){
	return x.w<y.w;
}
vector<node2>g[10005];
int fd(int x){
	if(fa[x]==x) return x;
	return fa[x]=fd(fa[x]);
}
void jn(int x,int y){
	fa[fd(x)]=fd(y);
}
void kruskal(){
	for(int i=1;i<=m;i++){
		int u=fd(a[i].u),v=fd(a[i].v);
		if(u!=v){
			g[a[i].u].push_back({a[i].v,a[i].w});
			g[a[i].v].push_back({a[i].u,a[i].v}); 
			fa[u]=v;
			if(++cnt==n-1) return ;
		} 
	}
}
int f[10005][21];
int dep[10005];
int maxx[10005][21];
void dfs1(int x,int fa,int w){
	dep[x]=dep[fa]+1;
	f[x][0]=fa;
	maxx[x][0]=w;
	for(int i=1;i<=20;i++){
		f[x][i]=f[f[x][i-1]][i-1];
		maxx[x][i]=max(maxx[x][i-1],maxx[f[x][i-1]][i-1]);
	}
	for(auto u:g[x]){
		if(u.v!=fa) dfs1(u.v,x,u.w);
	}
}
int lca(int x,int y){
	if(dep[x]<dep[y]) swap(x,y);
	for(int i=20;i>=0;i--){
		if(dep[f[x][i]]>=dep[y]){
			x=f[x][i];
		}
	}
	if(x==y) return x;
	for(int i=20;i>=0;i--){
		if(f[x][i]!=f[y][i]){
			x=f[x][i];
			y=f[y][i];
		}
	}
	return f[x][0];
}
int query(int x,int y){
	int l=lca(x,y);
	int maxxx=0,maxy=0;
	for(int i=20;i>=0;i--){
		if(dep[x]-(1<<i)>=dep[l]){
			maxxx=max(maxx[x][i],maxxx);
			x=f[x][i];
		}
	}
	for(int i=20;i>=0;i--){
		if(dep[y]-(1<<i)>=dep[l]){
			maxy=max(maxx[y][i],maxy);
			y=f[y][i];
		}
	}
	return max(maxxx,maxy);
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++) fa[i]=i;
	for(int i=1;i<=m;i++) cin>>a[i].u>>a[i].v>>a[i].w;
	sort(a+1,a+m+1,cmp);
	kruskal();
	dfs1(1,0,0);
	cin>>q;
	while(q--){
		int u,v;
		cin>>u>>v;
		cout<<query(u,v)<<"\n";
	}
	return 0;
}

建树那里错了