Cod sursa(job #167694)
#include <stdio.h>
#include <string.h>
#define inf 2000000000
int n, m, a[1505][1505], viz[1505], d[1505], c[1505];
void citire()
{
freopen("dmin.in","r",stdin);
freopen("dmin.out","w",stdout);
int i, x, y, c;
scanf("%d %d",&n,&m);
for (i = 1; i <= m; i++)
{
scanf("%d %d %d",&x,&y,&c);
a[x][y] = a[y][x] = c;
}
}
void Dijkstra()
{
int i;
for (i = 1; i <= n; i++) d[i] = 30000;
d[1] = 1;
int j, min, pmin, k;
d[1] = 1;
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
{
if (i != j)
if ((!d[i] || d[i] > d[j] * a[j][i] && a[i][j]) && d[j] * a[i][j] > 0)
{
d[i] = d[j] * a[i][j];
c[i] = 1;
}
else if (d[i] == d[j] * a[i][j]) c[i]++;
}
for (i = 2; i <= n; i++) printf("%d ",c[i]);
}
int main()
{
citire();
Dijkstra();
return 0;
}