Cod sursa(job #2263261)

Utilizator iarinatudorTudor Iarina Maria iarinatudor Data 18 octombrie 2018 15:36:34
Problema Arbore partial de cost minim Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#define pb push_back
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int n,m,gr[200001];
struct muchie
{
    int x,y;
};
struct nod
{
    int c;
    muchie m;

};
vector <muchie> S;
vector <nod> V;
bool op(nod x,nod y)
{
    return x.c<y.c;
}
void citire()
{
    fin>>n>>m;
    for(int i=1; i<=n; i++)
        gr[i]=i;
    for(int i=1; i<=m; i++)
    {
        nod a;
        fin>>a.m.x>>a.m.y>>a.c;
        V.pb(a);
    }
    sort(V.begin(),V.end(),op);
}
int cost=0;

int grupa(int i){
    int R,y;
    for(R=i; gr[R] != R; R=gr[R]);
    for(;gr[R] != i;){
        y = gr[i];
		gr[i] = R;
		i = y;
    }

    return R;
}
void reuniune(int i, int j){
    gr[grupa(i)]=grupa(j);
}
void rez()
{   int mini,maxi;
    int i=1;
    for(auto&v:V)
    {   if(i>n-1) return;
        if(gr[v.m.x]!=gr[v.m.y])
        {


            reuniune(v.m.x,v.m.y);
            S.pb(v.m);
            cost+=v.c;
            i++;

        }
    }
}
void afish()
{
    fout<<cost<<"\n"<<n-1<<"\n";
    for(auto&v:S)
    {
        fout<<v.x<<" "<<v.y<<"\n";
    }
}
int main()
{
    citire();
    rez();
    afish();
    return 0;
}