Cod sursa(job #1836924)

Utilizator AsttridMocanu Ada Astrid Asttrid Data 28 decembrie 2016 20:38:41
Problema Arbore partial de cost minim Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
///alg kruskal
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");
struct elem{int x,y;
float c;};
elem v[200000];
int l[200000],i,j,n,m,w,t,nr,s[400000];
float cost;
void citire(){in>>n>>m;
for(i=1;i<=m;i++)in>>v[i].x>>v[i].y>>v[i].c;
in.close();
}
void sortare(){int i,j;
for(i=1;i<m;i++)
    for(j=i+1;j<=m;j++)
if(v[i].c>v[j].c){v[0]=v[i];v[i]=v[j];v[j]=v[0];}
}
void init(){
for(i=1;i<=n;i++)l[i]=i;}

void rez(){
for(i=1;i<=m&&nr<n;i++){
    if(l[v[i].x]!=l[v[i].y]){s[++nr]=i;cost+=v[i].c;
    w=l[v[i].x];t=l[v[i].y];
        for(j=1;j<=n;j++)if(l[j]==t)l[j]=w;}
}

}

bool cmp(elem a,elem b){
return a.c<b.c;
}

int main(){
citire();
sort(v+1,v+m+1,cmp);
init();
rez();
out<<cost<<"\n";
out<<n-1<<"\n";
for(i=1;i<=nr;i++)
     out<<v[s[i]].x<<" "<<v[s[i]].y<<"\n";
return 0;}