Cod sursa(job #2277601)

Utilizator PredescuSebastianIonPredescu Sebastian Ion PredescuSebastianIon Data 6 noiembrie 2018 16:45:23
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int n,m,i,x,y,c,nod,sol[200005],j;
int plateste_factura_de_la_curentul_electric=0;
int ok[200005];
vector <pair<int,int> > g[200005];
priority_queue <pair<int,pair<int,int> >,vector<pair<int,pair<int,int> > >,greater<pair<int,pair<int,int> > >  > h;
int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        sol[i]=i;
    }
    for(i=1;i<=m;i++)
    {
        fin>>x>>y>>c;
        g[x].push_back(make_pair(y,c));
        g[y].push_back(make_pair(x,c));
    }
    ok[1]=true;
    for(i=0;i<g[1].size();i++)
    {
        h.push(make_pair(g[1][i].second,make_pair(1,g[1][i].first)));
    }
    for(i=1;i<n;i++)
    {
        while(ok[h.top().second.second]==1)
        {
            h.pop();
        }
        nod=h.top().second.second;
        ok[nod]=true;
        sol[nod]=h.top().second.first;
        plateste_factura_de_la_curentul_electric=plateste_factura_de_la_curentul_electric+h.top().first;
        for(j=0;j<g[nod].size();j++)
        {
            if(!ok[g[nod][j].first])
            {
                h.push(make_pair(g[nod][j].second, make_pair(nod,g[nod][j].first)));
            }
        }
    }
    fout<<plateste_factura_de_la_curentul_electric<<'\n'<<n-1<<'\n';
    sol[1]=0;
    for(i=2; i<=n; i++)
        fout<<sol[i]<<' '<<i<<'\n';
    return 0;
}