Pagini recente » Cod sursa (job #256788) | Cod sursa (job #3199137) | Cod sursa (job #609502) | Cod sursa (job #135231) | Cod sursa (job #2372003)
#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;
}