Cod sursa(job #2039177)

Utilizator TherevengerkingSurani Adrian Therevengerking Data 14 octombrie 2017 12:23:53
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
#define x first.first
#define y first.second
#define z second
#define pb push_back
#define pii pair<int,int>
const int Mmax = 400000 + 5;
const int Nmax = 200000 + 5;
int n, m, pr[Nmax], cost[Nmax];
pair<pii , int> p[Mmax];
vector<pii> ans;
bool cmp(pair<pii, int>a, pair<pii, int> b)
{
    return a.z < b.z;
}
int parinte(int nod)
{
    if(pr[nod] == nod)return nod;
    return pr[nod] = parinte(pr[nod]);
}
int main()
{
    fin >> n >> m;
    for(int i = 1; i <= n; ++i)
        pr[i] = i;
    for(int i = 1; i <= m; ++i)
        fin >> p[i].x >> p[i].y >> p[i].z;
    sort(p + 1, p + m + 1, cmp);

    for(int i = 1; i <= m; ++i)
    {
        int a = p[i].x , b = p[i].y, c = p[i].z;
        if(parinte(a) == parinte(b))continue;
        ans.pb({a,b});
        cost[parinte(b)] += cost[parinte(a)] + c;
        pr[parinte(a)] = parinte(b);
    }
    fout << cost[parinte(1)] << '\n';
    fout << n - 1 << '\n';
    for(int i = 0; i < ans.size(); ++i)
        fout << ans[i].first << " " <<ans[i].second << '\n';
    return 0;
}