Pagini recente » Cod sursa (job #1485537) | Cod sursa (job #240124) | Cod sursa (job #1390977) | Cod sursa (job #1131462) | Cod sursa (job #223247)
Cod sursa(job #223247)
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define MAXN 150010
struct NOD {
long i, j, c;
} a[30001];
long i, j, ti, tj, t, n, m, k, c[MAXN], d[MAXN], viz[MAXN], max[MAXN];
int cmp(const void *a, const void *b) {
return (((NOD*)a)->c - ((NOD*)b)->c);
}
long GAS(long);
int main() {
freopen("radiatie.in", "r", stdin);
freopen("radiatie.out", "w", stdout);
scanf("%ld %ld %ld", &n, &m, &k);
for (t = 0; t < m; ++t) {
scanf("%ld %ld %ld", &a[t].i, &a[t].j, &a[t].c);
}
qsort(a, m, sizeof(NOD), cmp);
for (i = 1, j = -1; i < n; ++i) {
for (ti = tj; ti == tj; ++j, ti = GAS(a[j].i), tj = GAS(a[j].j));
c[tj] = ti;
d[tj] = a[j].c;
}
for (t = 1;t <= k; ++t) {
scanf("%ld %ld", &i, &j);
viz[i] = t;
max[i] = 0;
while(c[i]) {
if (d[i] > max[i]) {
max[c[i]] = d[i];
} else {
max[c[i]] = max[i];
}
i = c[i];
viz[i] = t;
}
if (j != i) {
if (viz[j] == t) {
printf("%ld\n", max[j]);
} else {
max[j] = 0;
while (viz[c[j]] != t) {
if (d[j] > max[j]) {
max[c[j]] = d[j];
} else {
max[c[j]] = max[j];
}
j = c[j];
}
if (d[j] > max[j]) {
max[j] = d[j];
}
if (max[c[j]] > max[j]) {
printf("%ld\n", max[c[j]]);
} else {
printf("%ld\n", max[j]);
}
}
} else {
printf("%ld\n",max[i]);
}
}
return 0;
}
long GAS(long k) {
while (c[k]) {
k = c[k];
}
return k;
}