Cod sursa(job #2118112)

Utilizator mateibanuBanu Matei Costin mateibanu Data 30 ianuarie 2018 08:32:28
Problema Arbore partial de cost minim Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <bits/stdc++.h>

using namespace std;

int s,n,m,t[200010],nr,r[200010];

struct yay{
    int x,y,c;
}v[400010];

int cmp(yay a, yay b){
    return a.c<b.c;
}

int arb(int x){
    if (t[x]==x) return x;
    else return arb(t[x]);
}

int main()
{
    int i;
    freopen("apm.in","r",stdin);
    freopen("apm.out","w",stdout);

    scanf("%d%d",&n,&m);
    for (i=1;i<=m;i++){
        scanf("%d%d%d",&v[i].x,&v[i].y,&v[i].c);
    }
    sort(v+1,v+m+1,cmp);
    for (i=1;i<=n;i++) t[i]=i;
    for (i=1;i<=m;i++){
        if (arb(v[i].x)!=arb(v[i].y)){
            t[arb(v[i].x)]=v[i].y;
            s+=v[i].c;
            r[++nr]=i;
        }
    }
    printf("%d\n%d\n",s,nr);
    for (i=1;i<=nr;i++){
        printf("%d %d\n",v[r[i]].x,v[r[i]].y);
    }
    return 0;
}