Pagini recente » Cod sursa (job #2159256) | Cod sursa (job #2167650) | Cod sursa (job #57212) | Cod sursa (job #893503) | Cod sursa (job #665202)
Cod sursa(job #665202)
#include <stdio.h>
#include <vector>
#include <set>
#include <utility>
using namespace std;
#define nmax 200005
#define inf 500000005
long i, n, m, a, b, c, d[nmax], pozan, rez;
pair<long, long> vfin[nmax];
pair <long, long> el1, el2, el;
vector <pair <long, long> > ma[nmax];
vector <pair <long, long> >::iterator it;
bool fol[nmax];
set <pair<long, long> > v;
void citire()
{
scanf("%ld %ld",&n, &m);
for (i=1;i<=m;i++)
{
scanf("%ld %ld %ld",&a, &b, &c);
el1.second=b; el1.first=c; ma[a].push_back(el1);
el2.second=a; el2.first=c; ma[b].push_back(el2);
}
for (i=1;i<=n;i++)
d[i]=inf;
}
void rezolvare()
{
fol[1]=1; pozan=1;
for (i=1;i<=n-1;i++)
{
for (it=ma[pozan].begin();it!=ma[pozan].end();it++)
{
el=*it;
if(!fol[el.second])
if (d[el.second]>el.first)
{
if (d[el.second]!=inf)
{ el1.second=el.second; el1.first=d[el.second]; v.erase(el1); }
d[el.second]=el.first;
v.insert(el);
}
}
el=*v.begin(); v.erase(v.begin());
vfin[i].first=el.second; vfin[i].second=pozan;
fol[el.second]=1; rez+=el.first; pozan=el.second;
}
printf("%ld\n",rez);
}
int main()
{
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
citire();
printf("%ld\n",n-1);
rezolvare();
for (i=1;i<n;i++)
printf("%ld %ld\n",vfin[i].first,vfin[i].second);
return 0;
}