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;
}