Pagini recente » Cod sursa (job #1160763) | Cod sursa (job #2477416) | Cod sursa (job #2322237) | Cod sursa (job #863712) | Cod sursa (job #3203280)
#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],cost,l[nr/2];
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
int cnt=1;
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 kruskal()
{
int i=1,k=1,nr1,nr2,j;
int cnt=0;
for (i=1;i<=n;i++) l[i]=i;
i=1;
while (k<=n-1)
{
if (l[v[i].x]!=l[v[i].y])
{
k++;
sol[++cnt].x=v[i].x; sol[cnt].y=v[i].y;
cost+=v[i].c;
nr1=l[v[i].x];
nr2=l[v[i].y];
for (j=1;j<=n;j++)
if (l[j]==nr2) l[j]=nr1;
}
i++;
}
}
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();
kruskal();
afis();
return 0;
}