Cod sursa(job #167694)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 29 martie 2008 22:21:30
Problema Drumuri minime Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#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;
}