Cod sursa(job #265979)

Utilizator c_e_manuEmanuel Cinca c_e_manu Data 24 februarie 2009 20:02:25
Problema Arbore partial de cost minim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include<cstdio>
#include<algorithm>

using namespace std;

struct muchie{
        int x,y,c;
        };
muchie v[200001],sol[200001];

int n,m,t[200001];

void read()
{       freopen("apm.in","r",stdin);
        int i;
        scanf("%d%d",&n,&m);
        //fin>>n>>m;
        for(i=1;i<=m;i++)
                scanf("%d%d%d",&v[i].x,&v[i].y,&v[i].c);
                //fin>>v[i].x>>v[i].y>>v[i].c;
}

int cmp(muchie a, muchie b)
{       return a.c<b.c;}
void kruskal()
{       freopen("apm.out","w",stdout);
        int i,j,k,l,nr,ct=0,ind=0;
        for(i=1;i<=n;i++) t[i]=i;
        i=1;
        nr=0;
        while(nr<n-1)
        {       if(t[v[i].x]!=t[v[i].y])
                {       nr++;
                        ct+=v[i].c;
                        sol[++ind]=v[i];
                        k=t[v[i].x];
                        l=t[v[i].y];
                        for(j=1;j<=n;j++)
                                if(t[j]==k) t[j]=l;
                }
                i++;
        }
        printf("%d %d\n",ct,n-1);
        //fout<<ct<<'\n'<<n-1<<'\n';
        for(i=1;i<=ind;i++)
                printf("%d %d\n", sol[i].x,sol[i].y);
                //fout<<sol[i].x<<' '<<sol[i].y<<'\n';
}

int main()
{       read();
        sort(v+1,v+1+m,cmp);
        kruskal();
        return 0;
}