Cod sursa(job #624323)

Utilizator Viva12Ferentz Sergiu Viva12 Data 22 octombrie 2011 11:07:18
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <cstdio>
#include <algorithm>
#define mmax 200100

using namespace std;

struct ceva{
    int x;
    int y;
    int c;
}c[mmax];

bool b[mmax];
int a[mmax];
int s;
int s2;
int n;
int m;

bool cmp(ceva a, ceva b)
{
    if(a.c<b.c)
        return true;
    return false;
}

int zeu(int i)
{
    if(a[i]==i)
        return i;
    return a[i]=zeu(a[i]);
}

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

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

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

    for ( int i = 1 ; i <= m ; i++ )
    {
        scanf("%d %d %d",&c[i].x , &c[i].y, &c[i].c);
    }
    sort( c+1, c+m+1, cmp);
    for(int i = 1; i <= m; i++)
    {
        if(zeu(c[i].x) == zeu(c[i].y) )
            continue;
        a[zeu(c[i].x)] = zeu(c[i].y);
        s+=c[i].c;
        b[i]=1;
        s2++;
    }
    printf("%d\n%d\n",s,s2);
    for(int i=1;i<=m;i++)
    {
        if(b[i])
        {
            printf("%d %d\n",c[i].x,c[i].y);
        }
    }




    return 0;
}