Cod sursa(job #2372003)

Utilizator marcogoldPop Mihali Marco Silviu marcogold Data 6 martie 2019 20:48:42
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

ofstream fo("apm.out");
ifstream fi("apm.in");

struct nod
{
    int V,anterior;
    int cost=0;
};

bool operator <(nod a,nod b)
{
    if(a.cost<b.cost)
        return false;

    return true;
}


int n,m;
int a,b,c,Valoare;
vector <nod> vecini[200005];
vector <nod> sol;
priority_queue <nod> coada;
bool viz[200005];
int main()
{

    fi>>n>>m;

    for(int i=1; i<=m; i++)
    {
        fi>>a>>b>>c;
        nod vv;
        vv.cost=c;
        vv.V=a;
        vv.anterior=b;
        vecini[b].push_back(vv);
        vv.V=b;
        vv.anterior=a;
        vecini[a].push_back(vv);
    }

    viz[1]=true;

    for(nod x:vecini[1])
    {
        coada.push(x);
    }


    while(coada.empty()==false && sol.size()<n-1)
    {

        while(viz[coada.top().V]==true)
        {
            coada.pop();
        }

        int Cost=coada.top().cost;
        int Curent=coada.top().V;
        viz[Curent]=true;
        Valoare+=coada.top().cost;
        sol.push_back(coada.top());

        for( nod vec:vecini[Curent])
        {
            if(viz[vec.V]==false)
                coada.push(vec);

        }





    }

    fo<<Valoare<<'\n';
    fo<<sol.size()<<'\n';

    for(nod X: sol)
        fo<<X.V<<" "<<X.anterior<<'\n';

    fi.close();
    fo.close();
    return 0;
}