Cod sursa(job #1311664)

Utilizator avaspAva Spataru avasp Data 8 ianuarie 2015 14:54:12
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<cstdio>
#include<algorithm>
using namespace std;

struct muchii{int a,b,c;};
muchii v[400001];

int n,m,arb[200001],cost,much,mini;

bool cmp(const muchii A, const muchii B){
    return A.c<B.c;
}

int radacina(int nod){
    if(arb[nod]==nod)
        return nod;
    else{
        arb[nod]=radacina(arb[nod]);
        return arb[nod];
    }
}

int main(){
    int i,j,ia,ib;
    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].a,&v[i].b,&v[i].c);
    }
    sort(v+1,v+m+1,cmp);
    for(i=1;i<=n;i++)
        arb[i]=i;
    cost=0;
    much=0;
    for(i=1;i<=m;i++){
        if(radacina(v[i].a)!=radacina(v[i].b)){//folosim muchia
            cost+=v[i].c;
            much++;
            arb[radacina(v[i].a)]=radacina(v[i].b);
        }
        else{
            v[i].a=-1;
        }
    }
    printf("%d\n%d\n",cost,much);
    for(i=1;i<=m;i++)
        if(v[i].a!=-1)
            printf("%d %d\n",v[i].a,v[i].b);
    return 0;
}