Cod sursa(job #1296164)

Utilizator radu_cebotariRadu Cebotari radu_cebotari Data 20 decembrie 2014 16:51:01
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include<fstream>
#include<iostream>
#include<set>
#include<vector>
using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");
const int NMAX = 100000;

vector<int> v[NMAX + 100];
vector<int> cost[NMAX + 100];
set< pair<int,int> > heap;
int viz[NMAX + 100],n,m;
long long sol;

void read()
{

    in>>n>>m;
    int a,b,c;
    for(int i = 1 ; i <= m ; i++){
        in>>a>>b>>c;
        v[a].push_back(b);
        v[b].push_back(a);
        cost[a].push_back(c);
        cost[b].push_back(c);
    }
    in.close();
}

void arb_part()
{
    int act = 1,nod = 1,nou;
    viz[1] = 1;
    while(nod != n){
        for(int i = 0 ; i < v[act].size() ; i++)
            if(!viz[v[act][i]])
                heap.insert(make_pair(cost[act][i],v[act][i]));
            while(viz[(*heap.begin()).second])
                heap.erase(heap.begin());
            if(!heap.empty()){
            nou = (*heap.begin()).second;
            sol += (*heap.begin()).first;
            viz[nou] = 1;
            act = nou;
            nod++;
            heap.erase(heap.begin());
            }
    }
    out<<sol;
    out.close();
}

int main()
{

    read();
    arb_part();
    return 0;
}