Cod sursa(job #2275501)

Utilizator stefantagaTaga Stefan stefantaga Data 3 noiembrie 2018 11:32:15
Problema Arbore partial de cost minim Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
vector < pair <int,int> > v[1000];
priority_queue <pair <int,pair<int,int> >,vector <pair <int,pair <int,int> > >,greater <pair <int,pair<int ,int > > > > h;
int n,m,i,x,y,cost,sel[1005],k,t[1005],j;
int main()
{
    f>>n>>m;
    for (i=1;i<=m;i++)
    {
        f>>x>>y>>cost;
        v[x].push_back(make_pair(y,cost));
        v[y].push_back(make_pair(x,cost));
    }
    sel[1]=1;
    for (i=0;i<v[1].size();i++)
    {
        h.push({v[1][i].second,{1,v[1][i].first}});
    }
    for (i=1;i<=n;i++)
    {
        t[i]=i;
    }
    t[1]=0;
    cost=0;
    for (i=1;i<n;i++)
    {
        while (sel[h.top().second.second]==1)
        {
            h.pop();
        }
        k=h.top().second.second;
        sel[k]=1;
        t[k]=h.top().second.first;
        cost+=h.top().first;
        for (j=0;j<v[k].size();j++)
    {
        h.push({v[k][j].second,{k,v[k][j].first}});
    }
    }
    g<<cost<<'\n';
    g<<n-1<<'\n';
    for (i=2;i<=n;i++)
    {
        g<<t[i]<<" "<<i<<'\n';
    }
    return 0;
}