Cod sursa(job #101886)

Utilizator andrei.12Andrei Parvu andrei.12 Data 13 noiembrie 2007 21:39:33
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.06 kb
/*
PROG: hurdles
LANG: C++
ID: andreib3
*/
#include<stdio.h>
#define infinit 2000000000
int n, m, tt, nrt, i, j, p, d[305], t[305], x, y, c, min, a[305][305], in, sf, nr[305];
struct citire{
	int v, c;
};
citire v[305][305];
int main()
{
	freopen("hurdles.in", "rt", stdin);
	freopen("hurdles.out", "wt", stdout);
	scanf("%d%d%d", &n, &m, &tt);
	for (i=1; i<=m; i++){
		scanf("%d%d%d", &x, &y, &c);
		v[x][++nr[x]].v = y;
		v[x][nr[x]].c = c;
	}
	for (nrt=1; nrt<=tt; nrt++){
		scanf("%d%d", &in, &sf);
		if (!a[in][sf]){
			for (i=1; i<=n; i++){
				d[i] = infinit;
				t[i] = 0;
			}
			d[in] = 0;
			for (i=1; i<=n; i++){
				min = infinit;
				for (j=1; j<=n; j++)
					if (!t[j] && d[j] < min){
						min = d[j];
						p = j;
					}
				t[p] = 1;
				for (j=1; j<=nr[p]; j++)
					if (v[p][j].c < d[v[p][j].v])
						d[v[p][j].v] = v[p][j].c;
			}
			for (i=1; i<=n; i++)
				a[in][i] = d[i];
		}
		if (a[in][sf] != infinit)
			printf("%d\n", a[in][sf]);
		else
			printf("-1\n");
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}