Cod sursa(job #670609)

Utilizator giuliastefGiulia Stef giuliastef Data 29 ianuarie 2012 16:32:56
Problema Arbore partial de cost minim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#include <vector>
#include <algorithm>
#define DMAX 400011
using namespace std;
int n,m,s;
int x[DMAX],y[DMAX],c[DMAX],gr[DMAX],ind[DMAX];
vector <int> sol;
bool cmp(int i, int j){
     return (c[i]<c[j]);
}
int grupa(int x){
    int y;
    for(y=x;y!=gr[y];y=gr[y]);
    return y;
}
void uneste(int x, int y){
     gr[grupa(x)]=grupa(y);
}
int main(){
    int i;
    ifstream f("apm.in");
    ofstream g("apm.out");
    f>>n>>m;
    for(i=1;i<=m;i++){
     f>>x[i]>>y[i]>>c[i];
     ind[i]=i;
    }
    for(i=1;i<=n;i++) gr[i]=i;
    sort(ind+1,ind+m+1,cmp);
    for(i=1;i<=m;i++){
     if(grupa(x[ind[i]])!=grupa(y[ind[i]])){
      s+=c[ind[i]];
      uneste(x[ind[i]],y[ind[i]]);
      sol.push_back(ind[i]); 
     }
    }
    g<<s<<"\n"<<n-1<<"\n";
    for(i=0;i<n-1;i++)
     g<<x[sol[i]]<<" "<<y[sol[i]]<<"\n";
    return 0;
}