Cod sursa(job #1784202)

Utilizator delta_wolfAndrei Stoica delta_wolf Data 19 octombrie 2016 20:55:32
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>
#include<algorithm>
using namespace std;

int tx,ty,n,m,i,cost;
int v[200010],tata[200001];
struct rec{int x,y,c;}a[400001];


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

int seek(int nod)
{
    if(tata[nod]!=nod)
        tata[nod]=seek(tata[nod]);
    return tata[nod];
}

int main()
{
    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",&a[i].x,&a[i].y,&a[i].c);
    sort(a+1,a+1+m,cmp);

    for(i=1;i<=n;i++)
        tata[i]=i;

    for(i=1;i<=m;i++)
    {
        tx=seek(a[i].x);
        ty=seek(a[i].y);
        if(tx!=ty||!tx)
        {
            cost+=a[i].c;
            v[++v[0]]=i;
            tata[tx]=ty;
        }
    }
    printf("%d\n%d\n",cost,v[0]);
    for(i=1;i<=v[0];i++)
    printf("%d %d\n",a[v[i]].x,a[v[i]].y);

    return 0;
}