Cod sursa(job #1336064)

Utilizator bogdanboboc97Bogdan Boboc bogdanboboc97 Data 6 februarie 2015 15:13:32
Problema Arbore partial de cost minim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");
priority_queue< pair< int , pair<int,int> > > q;
vector<int> c;
vector< pair<int,int> > sol;
int n,ct;
void kruskal()
{
    int sel=0;
    while(sel<n-1)
    {
        int cost=-q.top().first,x=q.top().second.first,y=q.top().second.second;
        q.pop();
        if(c[x]!=c[y])
        {
            sol.push_back({x,y});
            ct+=cost;
            int mx=max(c[x],c[y]),mn=min(c[x],c[y]);
            for(int i=1;i<=n;i++)
                if(c[i]==mx)
                c[i]=mn;
            sel++;
        }
    }
}
int main()
{
    int m,x,y,z;
    in>>n>>m;
    for(;m;m--)
    {
        in>>x>>y>>z;
        q.push({-z,{x,y}});
    }
    for(int i=0;i<=n;i++)c.push_back(i);
    kruskal();
    out<<ct<<'\n'<<n-1<<'\n';
    for(int i=0;i<n-1;i++)out<<sol[i].first<<' '<<sol[i].second<<'\n';
    return 0;
}