Cod sursa(job #2426892)

Utilizator dianamichesaRosu Diana Michesa dianamichesa Data 29 mai 2019 21:23:07
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <set>

using namespace std;

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

const int N = 400001;
set < pair <int, pair< int, int > > > graf;
int n, m, costtotal;
int sef[N];

int find(int x) {
if(sef[x]==x) return x;
    sef[x]=find(sef[x]);
    return sef[x];
}

int main()
{
    f >> n >> m;
    int x, y, c;
    for(int i = 1; i <= m; i ++) {
        f >> x >> y >> c;
        graf.insert(make_pair(c, make_pair(x, y)));
    }
    for(int i = 1; i <= n; i ++)
        sef[i] = i;
    for(auto i = graf.begin(); i != graf.end();) {
        int c1 = i->second.first;
        int c2 = i->second.second;
        c1 = find(c1);
        c2 = find(c2);
        if(c1 != c2) {
            costtotal += i->first;
            sef[c2] = c1;
            i ++;
        }
        else
            i = graf.erase(i);
    }
    g << costtotal << '\n' << graf.size() << '\n';
    for(auto i = graf.begin(); i != graf.end(); i ++) {
        g << i->second.first << ' ' << i->second.second << '\n';
    }
    return 0;
}