Cod sursa(job #1127679)

Utilizator Dddarius95Darius-Florentin Neatu Dddarius95 Data 27 februarie 2014 13:23:13
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <algorithm>
#include <vector>
#define Nmax 200009
#define Mmax 400099
#define pb push_back
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");

int N,M,T[Nmax],cost;

struct much
{
     int x,y,c;
}E[Mmax];

vector  < much > sol;

bool cmp(much A,much B)
{
     return A.c<B.c;
}

int gr(int node)
{
     if(node!=T[node])T[node]=gr(T[node]);
     return T[node];
}

void Reunion(int x,int y)
{
     T[gr(x)]=gr(y);
}

int main()
{
     f>>N>>M;
     for(int i=1;i<=M;++i)
          f>>E[i].x>>E[i].y>>E[i].c;
     sort(E+1,E+1+M,cmp);
     for(int i=1;i<=N;++i)T[i]=i;
     for(int i=1;i<=M && sol.size()!=N-1;++i)
          if(gr(E[i].x)!=gr(E[i].y))
               cost+=E[i].c, sol.pb(E[i]), Reunion(E[i].x,E[i].y);
     g<<cost<<'\n';
     g<<sol.size()<<'\n';
     for(int i=0;i<sol.size();++i)
          g<<sol[i].x<<' '<<sol[i].y<<'\n';
     f.close();g.close();
     return 0;
}