Cod sursa(job #624333)

Utilizator mytzuskyMihai Morcov mytzusky Data 22 octombrie 2011 11:16:30
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <stdio.h>

#define N 200010
#define NN 400010

using namespace std;

int n,m,op,s;
int t[N], x[N],y[N],c[N],nr[NN];

struct rez{
    int x,y;
}a[NN];
int lg;

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

bool comp(int i, int j)
{
    return (c[i] < c[j]);
}

void citire()
{
    freopen("apm.in","r",stdin);

    scanf("%d %d",&n,&m);

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

    for(int i=1;i<=m;i++)
    {
        scanf("%d %d %d",&x[i],&y[i],&c[i]);
        nr[i]=i;
    }
    sort(nr+1,nr+1+m,comp);

    for(int i=1;i<=m;i++)
    {
        if( f(x[nr[i]]) != f(y[nr[i]]) )
        {
            s+=c[nr[i]];

            a[++lg].x = x[nr[i]];
            a[lg].y = y[nr[i]];
            t[f(x[nr[i]])] = f(y[nr[i]]);

        }
    }

    printf("%d\n%d\n",s,lg);
    for(int i=1;i<=lg;i++)
        printf("%d %d\n",a[i].y,a[i].x);
}

int main()
{
    freopen("apm.out","w",stdout);
    citire();

    return 0;
}