Pagini recente » Cod sursa (job #2892008) | Cod sursa (job #2553086) | Cod sursa (job #759994) | Cod sursa (job #630824) | Cod sursa (job #943016)
Cod sursa(job #943016)
#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;
}