Pagini recente » Cod sursa (job #2928649) | Cod sursa (job #1380555) | Cod sursa (job #1072257) | Cod sursa (job #1628998) | Cod sursa (job #969354)
Cod sursa(job #969354)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <queue>
#include <cmath>
#include <bitset>
#define N 200001
using namespace std;
int m,n,cost;
struct edge { int nod,val,prec;};
vector < pair<int , int> > v[N];
bitset <N> apar;
class cmp
{
public:
bool operator () (edge a, edge b)
{
return a.val>b.val;
}
};
priority_queue <edge, vector<edge>, cmp> heap;
void adauga_in_heap(int vf)
{
edge E;
int i;
for (i=0;i<v[vf].size();i++)
{
E.prec=vf;
E.nod=v[vf][i].first;
E.val=v[vf][i].second;
heap.push(E);
}
}
int main()
{
fstream f,g;
f.open("apm.in",ios::in);
g.open("apm.out",ios::out);
f>>n>>m;
int i,x,y,z;
for (i=1;i<=m;i++)
{
f>>x>>y>>z;
v[x].push_back(make_pair(y,z));
v[y].push_back(make_pair(x,z));
}
g<<" \n"<<n-1<<'\n';
apar[1]=1;
adauga_in_heap(1);
edge E;
int nod;
while (!heap.empty())
{
E=heap.top();
heap.pop();
nod=E.nod;
if (!apar[nod])
{
apar[nod]=1;
adauga_in_heap(nod);
cost+=E.val;
g<<E.prec<<" "<<E.nod<<'\n';
}
}
g.seekg(0,ios::beg);
g<<cost;
}