Pagini recente » Cod sursa (job #2270311) | Monitorul de evaluare | Cod sursa (job #1527397) | Cod sursa (job #2557408) | Cod sursa (job #2417732)
#include <iostream>
#include <queue>
#include <vector>
#include <fstream>
#include <tuple>
using namespace std;
priority_queue <tuple<int,int,int> > coada;
vector <int> graf[200005];
vector <int> grafc[200005];
vector <tuple<int,int,int> > muchii;
int dist[200005];
int viz[200005];
int cost;
void Prim(int nod)
{
int i,lim,x,y,c;
tuple <int,int,int> tuplu;
viz[nod]=1;
lim=graf[nod].size();
for(i=0;i<lim;i++)
coada.push(make_tuple(-grafc[nod][i],nod,graf[nod][i]));
while(coada.empty()==0)
{
tuplu=coada.top();
coada.pop();
c=-get<0>(tuplu);
x=get<1>(tuplu);
y=get<2>(tuplu);
if(viz[x]==0 || viz[y]==0)
{
if(viz[x]==0)
{
muchii.push_back(make_tuple(x,y,c));
cost=cost+c;
viz[x]=1;
lim=graf[x].size();
for(i=0;i<lim;i++)
{
coada.push(make_tuple(-grafc[x][i],x,graf[x][i]));
}
}
if(viz[y]==0)
{
muchii.push_back(make_tuple(x,y,c));
cost=cost+c;
viz[y]=1;
lim=graf[y].size();
for(i=0;i<lim;i++)
{
coada.push(make_tuple(-grafc[y][i],y,graf[y][i]));
}
}
}
}
}
int main()
{
ifstream f("apm.in");
ofstream g("apm.out");
int i,N,M,x,y,c,lim;
f>>N>>M;
for(i=1;i<=M;i++)
{
f>>x>>y>>c;
graf[x].push_back(y);
graf[y].push_back(x);
grafc[x].push_back(c);
grafc[y].push_back(c);
}
Prim(1);
g<<cost<<endl;
lim=muchii.size();
g<<lim<<endl;
for(i=0;i<lim;i++)
g<<get<0>(muchii[i])<<" "<<get<1>(muchii[i])<<endl;
return 0;
}