Cod sursa(job #1379337)

Utilizator turbowin120Amarandei-Stanescu Alexandru turbowin120 Data 6 martie 2015 17:28:49
Problema Arbore partial de cost minim Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
const int N=200420;
const int M=400420;

struct gr{ int x, y, c;}g[M];
int p[N],n,m,drumx[N],drumy[N];
long long sum;


void afisare(){
    FILE *out;
    out=fopen("apm.out","w");
    n--;

    fprintf(out,"%lld\n%d\n",sum,n);
    for(int i=1;i<=n;i++){
        fprintf(out,"%d %d\n",drumx[i],drumy[i]);

    }

}


inline bool cmp(gr x, gr y){
    return (x.c<y.c);
}

inline int  caut(int x){
    while(p[x]) {
        x=p[x];
    }
    return x;
}
inline bool uneste(int x, int y){
    if(x!=y){
        p[y]=x;
        return 1;
    }
    return 0;

}

void citire(){
    FILE *in;
    in=fopen("apm.in","r");
    fscanf(in,"%d%d",&n,&m);
    int a,b,c;
    for(int i=1;i<=m;i++){
        fscanf(in,"%d%d%d",&a,&b,&c);
        g[i].x=a;
        g[i].y=b;
        g[i].c=c;
    }
    sort(g+1,g+m+1,cmp);

}


void rez(){
    int j=1,i=1;
   while(j<n&&i<m){
        if(uneste(caut(g[i].x), caut(g[i].y))){
            drumx[j]=g[i].x;
            drumy[j]=g[i].y;
            j++;
            //cnt++;
            sum+=g[i].c;
        }
        i++;

    }


}

int main()
{
    citire();
    rez();
    afisare();
    return 0;
}