struct Edge { int u,v,w; }edge[MAXN]; int n,m,ecnt; int p[maxn]; bool operator <(const Edge a,const Edge b) { return a.w<b.w; } int find(int a) { if(a==p[a]) return a; p[a]=find(p[a]); return p[a]; } bool Kruskal() { int i; for(i=0;i<n;i++) p[i]=i; for(i=0;i<m;i++) { int x=find(edge[i].u); int y=find(edge[i].v); if(x!=y) { p[x]=y; cnt++; } if(cnt==n-1) break; } return cnt==n-1; }