Pagini recente » Cod sursa (job #1922487) | Solutii preONI 2006 - Runda a 2-a | Cod sursa (job #2913052) | Cod sursa (job #7718) | Cod sursa (job #6875)
Cod sursa(job #6875)
#include <stdio.h>
#define FIN "radiatie.in"
#define FOUT "radiatie.out"
#define nmax 15001
struct nod {int vf, c;
nod *next;};
nod *q;
typedef nod *pnod;
pnod a[nmax];
int d[nmax], s[nmax], i, j, k, n, m, x, y, cost, k2;
int nstart, min, poz, nfin;
void addmuchie (int x, int y, int cost)
{
nod *p = new nod;
p -> c = cost;
p -> vf = y;
p -> next = a[x];
a[x] = p;
}
int max (int q, int r)
{
if (q < r)
return r;
return q;
}
int
main ()
{
freopen (FIN, "rt", stdin);
freopen (FOUT, "wt", stdout);
scanf ("%d%d%d", &n, &m, &k2);
for (i = 1; i <= m; i++)
{
scanf ("%d%d%d", &x, &y, &cost);
addmuchie (x, y, cost);
addmuchie (y, x, cost);
}
while (k2)
{
scanf ("%d%d", &nstart, &nfin);
for (i = 1; i <= n; i++)
if (i != nstart)
{
d[i] = 1000000001;
s[i] = 0;
}
d[nstart] = 0;
for (q = a[nstart]; q != NULL; q = q -> next)
d[q -> vf] = q -> c;
s[nstart] = 1;
for (k = 1; k < n; k++)
{
min = 1000000001;
for (i = 1; i <= n; i++)
if (s[i] != 1)
if (d[i] < min)
{
min = d[i];
poz = i;
}
s[poz] = 1;
for (q = a[poz]; q != NULL; q = q -> next)
if (d[q -> vf] > max (min, q -> c))
d[q -> vf] = max (min, q -> c);
}
k2--;
printf ("%d\n", d[nfin]);
}
return 0;
}