Cod sursa(job #1629693)

Utilizator Marius7122FMI Ciltea Marian Marius7122 Data 4 martie 2016 17:46:29
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <stdio.h>
#include <algorithm>
using namespace std;
struct muchie
{
    int c,x,y;
}graf[400005],v[200005];

long n,m,i,sum,q;
int t[200005];

int radacina(int x)
{
    if(t[x]==0)
        return x;
    t[x]=radacina(t[x]);
    return t[x];
}
void reuneste(int x,int y)
{
    t[radacina(y)]=radacina(x);
}
bool cmp(muchie a , muchie b)
{
    return a.c<b.c;
}
int main()
{
    FILE *f1,*f2;
    f1=fopen("apm.in","r");
    f2=fopen("apm.out","w");
    fscanf(f1,"%ld%ld",&n,&m);
    for(i=0;i<m;i++)
        fscanf(f1,"%d%d%d",&graf[i].x,&graf[i].y,&graf[i].c);
    sort(graf,graf+m,cmp);
    for(i=0,q=0;i<m && q<n-1;i++)
        if(radacina(graf[i].x)!=radacina(graf[i].y))
        {
            sum+=graf[i].c;
            reuneste(graf[i].x,graf[i].y);
            v[q++]=graf[i];
        }
    fprintf(f2,"%ld\n%ld\n",sum,n-1);
    for(i=0;i<q;i++)
        fprintf(f2,"%d %d\n",v[i].x,v[i].y);
    return 0;
}