Cod sursa(job #2263256)

Utilizator iarinatudorTudor Iarina Maria iarinatudor Data 18 octombrie 2018 15:32:51
Problema Arbore partial de cost minim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 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;
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])
        {


            if(v.m.x>v.m.y)
            {
                maxi=v.m.x;
                mini=v.m.y;
            }
            else
            {
                maxi=v.m.y;
                mini=v.m.x;
            }
            int t=gr[maxi];
            for(int i=1; i<=n; i++)
                if(gr[i]==t)
                    gr[i]=gr[mini];
            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;
}