Pagini recente » Cod sursa (job #2740850) | Cod sursa (job #2903241) | Cod sursa (job #150055) | Cod sursa (job #83962) | Cod sursa (job #101886)
Cod sursa(job #101886)
/*
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;
}