Minimum Spanning Tree (Kruskal)
struct node {
int u,v,w;
bool operator < ( const node &b) const{
return w<b.w;
}
}e[mx];
int pr[mx];
int find(int r) { return r==pr[r]?r:(pr[r]=find(pr[r])); }
int mst(int n,int m){
int i,u,v,r=0;
for(i=1;i<=n;i++) pr[i]=i;
sort(e,e+m);
for(i=0;i<m;i++) {
u=find(e[i].u);
v=find(e[i].v);
if(u!=v) {
r+=e[i].w;
pr[u]=v;
}
}
return r;
}