Cod sursa(job #901021)

Utilizator RaduDoStochitoiu Radu RaduDo Data 28 februarie 2013 23:39:39
Problema Arbore partial de cost minim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<iostream>
#include<cstdio>
#include<algorithm>
#define maxN 200005
#define maxM 400005
using namespace std;
struct muchie {int x,y,c;} u[maxM],t[maxN];
int n,m,i,j,v[maxN],cost;

int cmp(muchie a,muchie b)
{
    return (a.c<b.c);
}

int main()
{
    freopen("apm.in","r",stdin);
    freopen("apm.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(i=1;i<=m;++i)
        scanf("%d%d%d",&u[i].x,&u[i].y,&u[i].c);
    sort(u+1,u+m+1,cmp);
    v[u[1].x]=1; v[u[1].y]=1; cost=u[1].c; t[1].x=u[1].x; t[1].y=u[1].y;
    for(i=1;i<n-1;++i)
    {
        j=1;
        while(v[u[j].x]==v[u[j].y]) j++;
        if(v[u[j].x]==1)
            v[u[j].y]=1;
        else
            v[u[j].x]=1;
        cost+=u[j].c;
        t[i+1].x=u[j].x; t[i+1].y=u[j].y;
    }
    printf("%d\n%d\n",cost,n-1);
    for(i=1;i<=n-1;++i)
        printf("%d %d\n",t[i].x,t[i].y);
    return 0;
}