Pagini recente » Cod sursa (job #1412021) | Cod sursa (job #1707488) | Cod sursa (job #37802) | Cod sursa (job #522419) | Cod sursa (job #605652)
Cod sursa(job #605652)
# include <algorithm>
# include <cstdio>
# include <vector>
using namespace std;
# define x first
# define y second
const char *FIN = "radiatie.in", *FOU = "radiatie.out";
const int MAX = 15005;
int N, M, Test, T[MAX], R[MAX], m[MAX], viz[MAX], C[MAX];
pair <int, pair <int, int> > P[MAX << 1];
vector <int> SOL;
int search (int x) {
for (; x != T[x]; x = T[x]);
return x;
}
void reunion (int x, int y, int z) {
if (R[x] < R[y]) T[x] = y, C[x] = z;
else T[y] = x, C[y] = z;
if (R[x] == R[y]) ++R[x];
}
int sol = 0;
int comp (void) {
return ++sol;
}
int main (void) {
freopen (FIN, "r", stdin);
freopen (FOU, "w", stdout);
scanf ("%d %d %d", &N, &M, &Test);
for (int i = 1; i <= M; ++i)
scanf ("%d %d %d", &P[i].y.x, &P[i].y.y, &P[i].x);
generate_n (T + 1, N, comp);
sort (P + 1, P + M + 1);
for (int i = 1; i <= M; ++i)
if (search (P[i].y.x) != search (P[i].y.y))
reunion (search (P[i].y.x), search (P[i].y.y), P[i].x);
for (int x, y, sol = 0, cnt = 0; Test; --Test, sol = 0) {
scanf ("%d %d", &x, &y);
for (m[x] = 0, viz[x] = ++cnt; x != T[x]; x = T[x]) {
if (sol < C[x]) sol = C[x];
m[T[x]] = sol, viz[T[x]] = cnt;
}
for (sol = 0; viz[y] != cnt; y = T[y])
if (sol < C[y]) sol = C[y];
if (sol < m[y]) sol = m[y];
printf ("%d\n", sol);
}
}