Cod sursa(job #943016)

Utilizator alexandru93moraru alexandru sebastian alexandru93 Data 24 aprilie 2013 00:19:54
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include<fstream>
#include<iostream>
#include<vector>
#include<algorithm>
#define MAX_N 200000
using namespace std;

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

int N,M;
int Cost=0;
vector<pair<int,int> > V[MAX_N];
vector<pair<int,int> > R;
vector<pair<int,int> > H;
vector<bool> Selected;

bool Compare(pair<int,int> a,pair<int,int> b)
{
    return a.second>b.second;
}

void Read()
{
    f>>N>>M;
    int x,y,c;
    for(int iterator=0;iterator<M;iterator++)
    {
        f>>x>>y>>c;
        V[x].push_back(make_pair(y,c));
        V[y].push_back(make_pair(x,c));
    }
    Selected.resize(N);
}

void EnHeap(int nod)
{
    for(vector<pair<int,int> >::iterator it=V[nod].begin();it!=V[nod].end();it++)
    {
        if(!Selected[it->first])
        {
            H.push_back(*it);
            std::push_heap(H.begin(),H.end());
            Selected[it->first]=true;
        }

    }
}

void PrimAlgorithm()
{
    int count=1;
    Selected[1]=true;
    EnHeap(1);

    while(count<N)
    {
        int p;
        count++;
        R.push_back(H[0]);
        Cost+=H[0].second;
        p=H[0].first;
        std::pop_heap(H.begin(),H.end());
        EnHeap(p);
    }
}

int main()
{
    Read();

    PrimAlgorithm();

    cout<<Cost;

    return 0;
}