Cod sursa(job #2678832)

Utilizator iuliaaa2110Barbu Iulia Andreea iuliaaa2110 Data 28 noiembrie 2020 19:54:35
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include<vector>

using namespace std;

ifstream f("apm.in");
ofstream g("apm.out");

vector< pair<int,int> >apm;

int n, m, t[200001], s;

struct muchii
{
    int x, y, cost;
};

muchii lm[400001];

bool cmp(muchii a, muchii b)
{
    return a.cost<b.cost;
}

int rep(int i)
{
    if(t[i]!=i)
        t[i] = rep(t[i]); //suprascriu cu noua radacina

    return t[i]; //reprezentantul subarborelui din care nodul i face parte
}

int main()
{
    f >> n >> m;

    for(int i = 0; i < m; i++)
        f >> lm[i].x >> lm[i].y >> lm[i].cost;

    sort(lm, lm + m, cmp);

    for(int i = 1; i <= n; i++)
        t[i] = i; //initial fiecare nod reprezinta un subarbore independent

    for(int i = 0; i < m; i++)
        if(rep(lm[i].x) != rep(lm[i].y)) // daca nodurile muchiei i fac parte din subarbori diferiti atunci legam subarborii
        {
            t[rep(lm[i].y)] = lm[i].x;
            s += lm[i].cost;
            apm.push_back ( make_pair(lm[i].x,lm[i].y));
        }

    g<<s<<'\n'<<apm.size()<<'\n';

   for( auto elem =apm.begin(); elem != apm.end(); elem++)
        g<<(*elem).first<<" " << (*elem).second<< '\n';

    return 0;
}