最大生成树的锅导致RE,但是查不出来错在哪里,求指教
#include<bits/stdc++.h>
#define maxn 100001
using namespace std;
int n,m,fa[maxn],head[maxn],vis[maxn],ct,cnt,p[maxn][25],lg[maxn],dep[maxn],dis[maxn][1001];
struct Edge{
int u,v,w,next;
}e[maxn],edge[maxn<<1];
inline void add(int u,int v,int w){
e[++cnt].u=u;
e[cnt].v=v;
e[cnt].w=w;
}
inline void add_edge(int u,int v,int w){
edge[++ct].u=u;
edge[ct].v=v;
edge[ct].next=head[u];
head[u]=ct;
}
int find (int x){return fa[x]==x?x:fa[x]=find(x);}
bool cmp(Edge a,Edge b){return a.w>b.w;}
void Krusal(){
sort(e+1,e+1+m,cmp);
int num=0;
for(int i=1;i<=cnt;++i){
int fx=find(e[i].u),fy=find(e[i].v);
if(fx!=fy){
fa[fx]=fy;
add_edge(e[i].u,e[i].v,e[i].w);
add_edge(e[i].v,e[i].u,e[i].w);
if(++num==n) return ;
}
}
}
void dfs(int u,int fa,int w){
vis[u]=1;
p[u][0]=fa;
dep[u]=dep[fa]+1;
dis[u][0]=w;
for(int i=1;(1<<i)<=dep[u];++i){
p[u][i]=p[p[u][i-1]][i-1];
dis[u][i]=min(dis[u][i-1],dis[p[u][i-1]][i-1]);
}
for(int i=head[u];i;i=e[i].next){
if(edge[i].w!=fa) dfs(edge[i].v,u,edge[i].w);
}
}
int lca(int x,int y){
if(find(x)!=find(y)) return -1;
int ans=210000000;
if(dep[x]<dep[y]) swap(x,y);
while (dep[x] > dep[y]) {
ans = min(ans, dis[x][lg[dep[x] - dep[y]] - 1]);
x = p[x][lg[dep[x] - dep[y]] - 1];
}
if(x==y) return x;
for (int i = lg[dep[x]] - 1; i >= 0; i--) {
if (p[x][i] != p[y][i]) {
ans = min(ans, dis[x][i]);
ans = min(ans, dis[y][i]);
x = p[x][i];
y = p[y][i];
}
}
ans = min(ans, min(dis[x][0], dis[y][0]));
return ans;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;++i) fa[i]=i;
for(int i=1;i<=m;++i){
int u,v,w;
cin>>u>>v>>w;
add(u,v,w);
}
int q;
cin>>q;
Krusal();
return 0;
for(int i=1;i<=n;++i) if(!vis[i]) dfs(i,0,0);
for (int i = 1; i <= n; i++) lg[i] = lg[i - 1] + (1 << lg[i - 1] == i);
for(int i=1;i<=q;++i){
int u,v;
cin>>u>>v;
cout<<lca(u,v)<<endl;
}
return 0;
}