Cod sursa(job #1887028)

Utilizator cristy801Cristi Chirtos cristy801 Data 21 februarie 2017 12:09:12
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <vector>
#include <queue>
#define maxn 200005

using namespace std;

ifstream f("apm.in");
ofstream g("apm.out");

vector < pair <int,int> > G[maxn];
priority_queue < pair <int, pair < int, int> > > pq;
int n,m,suma,tata[maxn];
bool viz[maxn];


void prim()
{
    pq.push(make_pair(0,make_pair(1,1)));
    int nod;
    while(!pq.empty())
    {
        pair< int, pair <int, int> > qtop = pq.top();
        pq.pop();
        nod = qtop.second.second;
        if(viz[nod])
            continue;
        suma+=-qtop.first;
        viz[nod]=1;
        tata[nod]=qtop.second.first;
        for(auto it : G[nod])
        {
            if(!viz[it.first])
                pq.push(make_pair(-it.second,make_pair(nod,it.first)));
        }
    }
}

int main()
{
    f>>n>>m;
    for(int  i = 1; i <= m; ++i)
    {
        int x, y, z;
        f >> x >> y >> z;
        G[x].push_back(make_pair(y, z));
        G[y].push_back(make_pair(x, z));
    }
    prim();
    g<<suma<<'\n'<<n-1<<'\n';
    for(int i=2;i<=n;++i)
        g<<i<<' '<<tata[i]<<'\n';
    return 0;
}