Cod sursa(job #2337132)

Utilizator MarinPeptenaruMarin Vasile Peptenaru MarinPeptenaru Data 5 februarie 2019 22:09:16
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");
struct muchie
{
    int i,j,c;
};
const int nx = 200001;
vector < muchie > w;
vector < pair < int , int > > sol;
int suma = 0;
int nr = 0;
int t[nx];
int n,m,i,j,c;
int radacina (int nod)
{
    if(nod==t[nod]) return nod;
    t[nod] = radacina(t[nod]);
    return t[nod];
}
void uneste (int i, int j)
{
    t[radacina(i)]=radacina(j);
}
bool crit (const muchie &a, const muchie &b)
{
    return a.c<b.c;
}
void apm()
{
    sort(w.begin(),w.end(), crit);
    for(int i=1; i<=n; i++)
        t[i] = i;
    for(vector < muchie > :: iterator it = w.begin(); it!=w.end() && nr<n-1; it++)
    {
        if(radacina(it->i)!=radacina(it->j))
        {
            uneste(it->i,it->j);
            suma+=it->c;
            sol.push_back({it->i,it->j});
            nr++;
        }
    }
    out<<suma<<'\n'<<nr<<'\n';
    for(vector < pair < int , int > > :: iterator it = sol.begin(); it!=sol.end(); it++)
        out<<it->first<<' '<<it->second<<'\n';
}
int main()
{
    in>>n>>m;
    for(;m;m--)
    {
        in>>i>>j>>c;
        w.push_back({i,j,c});
    }
    apm();
    return 0;
}