Pagini recente » Cod sursa (job #2048621) | Cod sursa (job #1022712) | Cod sursa (job #1103646) | Cod sursa (job #647619) | Cod sursa (job #2349820)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ofstream fo("apm.out");
ifstream fi("apm.in");
struct muchie
{
int nod,venit;
int cost;
};
bool operator <(muchie x,muchie y)
{
if(x.cost<y.cost)
return false;
return true;
}
priority_queue<muchie> coada;
vector <muchie> solutie;
vector <muchie> vecini[200005];
long long suma;
int m,a,b,c;
unsigned n;
bool viz[200005];
int main()
{
fi>>n>>m;
for(int i=1; i<=m; i++)
{
fi>>a>>b>>c;
muchie noua;
noua.nod=b;
noua.cost=c;
noua.venit=a;
vecini[a].push_back(noua);
noua.nod=a;
noua.venit=b;
vecini[b].push_back(noua);
}
/// fixam nod 1 ca root
viz[1]=true;
for(muchie v:vecini[1])
{
coada.push(v);
}
while(coada.empty()==false && solutie.size()<n-1)
{
while( viz[coada.top().nod] )
coada.pop();
int Curent=coada.top().nod;
int Cost=coada.top().cost;
suma+=Cost;
viz[Curent]=true;
solutie.push_back(coada.top());
for(muchie v:vecini[Curent])
if(viz[v.nod]==false)
coada.push(v);
}
fo<<suma<<'\n';
fo<<solutie.size()<<'\n';
for(muchie sol:solutie)
fo<<sol.nod<<" "<<sol.venit<<'\n';
fi.close();
fo.close();
return 0;
}