Pagini recente » Istoria paginii runda/rewrew | Scurt ghid pentru folosirea MinGW Developer Studio | Istoria paginii runda/oji200311 | Atasamentele paginii Clasament olimpiada_nationala_9 | Cod sursa (job #2016286)
#include <cstdio>
using namespace std;
#define inf 10000000
int n,m,C[10000][10000],viz[10000],sum=0,min=99999,l,c,sol[10000][10000],nrtot=0;
void Read()
{
int aux1,aux2,co;
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
scanf("%i %i",&n,&m);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i == j)
C[i][j] = 0;
else
C[i][j] = inf;
}
}
for(int i=1;i<=m;i++)
{
scanf("%i %i %i",&aux1,&aux2,&co);
C[aux1][aux2] = C[aux2][aux1] = co;
}
}
void Prim(int nod)
{
viz[nod] = 1;
for(int i=2;i<=n;i++)
{
min = inf;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(viz[j] == 0 && viz[i] == 1 && C[i][j] < min)
{
min = C[i][j];
l = i;
c = j;
}
}
}
sum += min;
viz[c] = 1;
sol[l][c] = 1;
nrtot++;
}
}
int main()
{
Read();
Prim(1);
printf("%i\n%i\n",sum,nrtot);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(sol[i][j] == 1)
printf("%i %i\n",i,j);
}
}
return 0;
}