Pagini recente » Cod sursa (job #285239) | Cod sursa (job #990946) | Cod sursa (job #1341028) | Cod sursa (job #2947041) | Cod sursa (job #1501448)
#include <iostream>
#include <fstream>
#define inf 30000
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
int t[1001],d[1001];
int c[1001][1001];
bool u[1001];
int n,m,cost,nr;
struct
{
int x,y;
}af[1001];
void citire()
{
int i,x,y,cost,j;
f>>n>>m;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
c[i][j]=inf;
for (i=1;i<=m;i++)
{
f>>x>>y>>cost;
c[x][y]=cost;
c[y][x]=cost;
}
}
void prim (int x)
{
int i,min,nod;
for (i=1;i<=n;i++)
{
d[i]=c[x][i];
t[i]=x;
}
u[x]=1;
while (1)
{
min=inf;
for (i=1;i<=n;i++)
if (!u[i] && d[i]<min)
{
min=d[i];
nod=i;
}
if (min==inf) break;
u[nod]=1;
cost+=d[nod];
nr++;
af[nr].x=t[nod];
af[nr].y=nod;
for (i=1;i<=n;i++)
if (d[i]>c[nod][i])
{
d[i]=c[nod][i];
t[i]=nod;
}
}//cout<<cost;
}
int main()
{
int i;
citire();
prim (2);
g<<cost<<'\n'<<nr<<'\n';
for (i=1;i<=nr;i++)
g<<af[i].x<<" "<<af[i].y<<'\n';
return 0;
}