Pagini recente » Borderou de evaluare (job #2805280) | Cod sursa (job #1895177) | Cod sursa (job #1751193) | Cod sursa (job #3194149) | Cod sursa (job #3203268)
#include <iostream>
#include <fstream>
#include <algorithm>
#define nr 400002
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
struct muchie
{
int x, y, c;
}v[nr],sol[nr];
int n,m,i,viz[nr/2],cnt=1,cost;
bool ordonare(muchie a, muchie b)
{
return a.c<b.c;
}
void citire()
{
f>>n>>m;
for (i=1;i<=m;i++)
f>>v[i].x>>v[i].y>>v[i].c;
}
void prim()
{
cost=v[1].c;///initial,costul este al primei muchii
viz[v[1].x]=viz[v[1].y]=1;
sol[1].x=v[1].x; sol[1].y=v[1].y;///prima muchie
int k, i;
for (k=1;k<=n-2;k++)
{
i=1;
while (viz[v[i].x]==viz[v[i].y])
i++;
sol[++cnt].x=v[i].x; sol[cnt].y=v[i].y;
cost+=v[i].c;
if (viz[v[i].x])
viz[v[i].y]=1;
else
viz[v[i].x]=1;
}
}
void afis()
{
int i;
g<<cost<<'\n'<<n-1<<'\n';
for (i=1;i<=n-1;i++)
g<<sol[i].x<<" "<<sol[i].y<<'\n';
}
int main()
{
citire();
sort(v+1,v+m+1,ordonare);
prim();
afis();
return 0;
}