Cod sursa(job #2768658)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 11 august 2021 18:17:06
Problema Arbore partial de cost minim Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include<stdio.h>
#define N 200001
int d[N],x[2*N],y[2*N],c[2*N],n,m,e,p[2*N],l[N],i,j;
int E(int x)
{
    if(d[x]==x)
        return x;
    d[x]=E(d[x]);
    return d[x];
}
void R(int x,int y)
{
    d[E(x)]=E(y);
}
int F(const void *a,const void *b)
{
    return c[*(int*)a]-c[*(int*)b];
}
int main()
{
    freopen("apm.in","r",stdin),freopen("apm.out","w",stdout),scanf("%d%d",&n,&m);
    for(i=0;i<m;++i)
        scanf("%d%d%d",x+i,y+i,c+i),d[i]=p[i]=i;
    qsort((void*)p,m,4,F);
    for(i=0;i<m;++i)
        if(E(x[p[i]])!=E(y[p[i]]))
            e+=c[p[i]],R(x[p[i]],y[p[i]]),l[j++]=p[i];
    printf("%d\n%d\n",e,n-1);
    for(i=0;i<n-1;++i)
        printf("%d %d\n",x[l[i]],y[l[i]]);
    return 0;
}