Cod sursa(job #2115841)

Utilizator alex2kamebossPuscasu Alexandru alex2kameboss Data 27 ianuarie 2018 10:42:13
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;
vector <pair<pair<int,int>,int>> p;
int n,m;
int t[200002];
int a,b,c;
vector <pair<int,int>> sol;
int suma;
int cauttata(int l)
{
    if(t[l]==0)
        return l;
    t[l]=cauttata(t[l]);
    return t[l];
}
bool cmp(pair<pair<int,int>,int> la, pair<pair<int,int>,int> lb)
{
    return la.second<lb.second;
}
int main()
{
    freopen("apm.in","r",stdin);
    freopen("apm.out","w",stdout);
    scanf("%d %d", &n,&m);
    for(int i=0;i<m;++i)
    {
        scanf("\n%d %d %d", &a,&b,&c);
        p.push_back({{a,b},c});
    }
    sort(p.begin(),p.end(),cmp);
    for(pair<pair<int,int>,int> i: p)
    {
        int tx=cauttata(i.first.first), ty=cauttata(i.first.second);
        if(tx!=ty)
        {
            suma+=i.second;
            sol.push_back(i.first);
            t[tx]=ty;
        }
    }
    cout<<suma<<"\n"<<sol.size()<<"\n";
    for(pair<int,int> i: sol)
    {
        cout<<i.first<<" "<<i.second<<"\n";
    }
    return 0;
}