Cod sursa(job #2390854)

Utilizator teodor.dumitrescuDumitrescu Teodor teodor.dumitrescu Data 28 martie 2019 13:37:17
Problema Arbore partial de cost minim Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>
#include <tuple>

using namespace std;

vector <int> graph[200005];
priority_queue <tuple<int,int,int> > myheap;
int cost_total;
int viz[200005];
vector <pair<int,int> > muchii_bune;
int nr_muchii_bune;
void kruskal(int N, int M)
{
    tuple <int,int,int> muchie;
    int i,x,y,c;
    for(i=1;i<=M;i++)
    {
        if(nr_muchii_bune==N-1)
            break;
        muchie=myheap.top();
        myheap.pop();
        x=get<1>(muchie);
        y=get<2>(muchie);
        c=-get<0>(muchie);
        if(viz[x]!=viz[y])
        {
            viz[x]=viz[y];
            cost_total=cost_total+c;
            muchii_bune.push_back(make_pair(x,y));
            nr_muchii_bune++;
        }
    }
}
int main()
{
    ifstream f("apm.in");
    ofstream g("apm.out");
    int N,M,x,y,c,i;
    f>>N>>M;
    for(i=1;i<=M;i++)
    {
        f>>x>>y>>c;
        graph[x].push_back(y);
        graph[y].push_back(x);
        myheap.push(make_tuple(-c,x,y));
    }
    for(i=1;i<=N;i++)
        viz[i]=i;
    kruskal(N,M);
    g<<cost_total<<endl;
    g<<N-1<<endl;
    for(i=0;i<N-1;i++)
        g<<muchii_bune[i].second<<" "<<muchii_bune[i].first<<endl;
    return 0;
}