Cod sursa(job #1325883)

Utilizator ipus1Stefan Enescu ipus1 Data 24 ianuarie 2015 14:22:07
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<cstdio>
#include<algorithm>
using namespace std;
struct much {int a,b,c;};
much /*op much*/ v[400001];
int rad[200001];
bool sortare( much a, much b)
    {return a.c<b.c;
    }
int radacina( int nod )
    {if(rad[nod]==nod)
        return nod;
    else
        {rad[nod]=radacina(rad[nod]);
        return rad[nod];
        }
    }
int vec[400001];
int main ()
{freopen ("apm.in","r",stdin);
freopen ("apm.out","w",stdout);
int n,m,i,s=0,x=0;
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,sortare);
for(i=1;i<=n;i++)
    rad[i]=i;
for(i=1;i<=m;i++)
    {
    if(radacina(v[i].a)!=radacina(v[i].b))
        {s+=v[i].c;
        x++;
        vec[x]=i;
        rad[radacina(v[i].a)]=radacina(v[i].b);
        }
    }

printf("%d\n%d\n",s,x);
for(i=1;i<=x;i++)
    printf("%d %d\n",v[vec[i]].a,v[vec[i]].b);
return 0;
}