最小生成树 maxn和maxm一定要开大鸭鸭鸭鸭

#include<cstdio>
#include<cstring> 
#include<algorithm>
using namespace std;

const int MAXN=1100000;
const int MAXM=10000000;
int F[MAXN];
struct Edge{
	int u,v,w;
}edge[MAXN];

int tol=0;
void addedge(int u,int v,int w){
	edge[tol].u=u;
	edge[tol].v=v;
	edge[tol++].w=w;
}

bool cmp(Edge a,Edge b){
	return a.w<b.w;
}

int find(int x){
	if (F[x]==-1) return x;
	else return F[x]=find(F[x]);
}

int Kruskal(int n){
	memset(F,-1,sizeof(F));
	sort(edge,edge+tol,cmp);
	//for (int i=0;i<tol;i++)
	// printf("edge[i].u=%d edge[i].v=%d edge[i].w=%d\n",edge[i].u,edge[i].v,edge[i].w);
	int cnt=0;
	int ans=0;
	for (int i=0;i<tol;i++){
		int u=edge[i].u;
		int v=edge[i].v;
		int w=edge[i].w;
		int t1=find(u); //printf("f[%d]=%d\n",u,t1);
		int t2=find(v);//printf("f[%d]=%d\n",v,t2);
		if (t1!=t2){
			 ans+=w;
			 F[t1]=t2;
			 cnt++;
		//	 printf("%d\n",cnt);
		}
	  if (cnt==n-1) break;
	}
	if (cnt<n-1) return -1;
	else return ans;
}
int main(){
	int n,m;int u,v,w;
	scanf("%d%d",&n,&m);
	for (int i=1;i<=m;i++)
	{
	  scanf("%d%d%d",&u,&v,&w);
	  addedge(u,v,w);
	  addedge(v,u,w); 
	}

	//for (int i=0;i<tol;i++)
	  //printf("i=%d %d %d e.w=%d\n",i,edge[i].u,edge[i].v,edge[i].w); 
    int len=Kruskal(n);
	printf("%d",len);
	return 0;
}