Cod sursa(job #993002)

Utilizator horatiu11Ilie Ovidiu Horatiu horatiu11 Data 2 septembrie 2013 23:26:11
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
# include <cstdio>
# include <algorithm>
using namespace std;
int n,m,i,l[400001],k,ct,j,a,b;
struct muchie
{
    int x,y,c;
}u[400001],sol[400001];
bool cmp(muchie a, muchie b)
{
    return a.c<b.c;
}
void citire()
{
    scanf("%d%d",&n,&m);
    for(i=1;i<=m;++i)
    {
        scanf("%d%d%d",&u[i].x,&u[i].y,&u[i].c);
        l[i]=i;
    }
}
int grupa(int nr)
{
    if(l[nr]==nr)return nr;
    l[nr]=grupa(l[nr]);
    return l[nr];
}
void reun(int a, int b)
{
    l[grupa(a)]=grupa(b);
}
void apm()
{
    k=0;i=1;ct=0;
    while(k<n-1)
    {
        a=u[i].x;b=u[i].y;
        if(grupa(a)!=grupa(b))
        {
            ++k;
            sol[k]=u[i];
            ct+=u[i].c;
            reun(a,b);
        }
        ++i;
    }
}
void afisare()
{
    printf("%d\n%d\n",ct,k);
    for(i=1;i<=k;++i)
        printf("%d %d\n",sol[i].x,sol[i].y);
}
int main()
{
    freopen("apm.in","r",stdin);
    freopen("apm.out","w",stdout);
    citire();
    sort(u+1,u+m+1,cmp);
    apm();
    afisare();
    return 0;
}