Pagini recente » Cod sursa (job #195616) | Cod sursa (job #2705299) | Cod sursa (job #2483522) | Cod sursa (job #2697489) | Cod sursa (job #3352938)
#include <bits/stdc++.h>
#define NMAX 30000
#define MMAX 30000
#define KMAX 15000
using namespace std;
struct edge_t {
int u, v, w;
};
int n, m, k, parent[NMAX], sz[NMAX];
edge_t edges[MMAX];
unordered_set<int> queries[KMAX];
int ans[KMAX];
int get_root(int u) {
if (u == parent[u]) {
return u;
}
return parent[u] = get_root(parent[u]);
}
void merge_queries(unordered_set<int> &lhs, unordered_set<int> &rhs, int w) {
if (lhs.size() < rhs.size()) {
swap(lhs, rhs);
}
for (int i : rhs) {
if (lhs.find(i) != lhs.end()) {
ans[i] = w;
lhs.erase(i);
} else {
lhs.insert(i);
}
}
}
void merge(int u, int v, int w) {
if (sz[u] < sz[v]) {
swap(u, v);
}
parent[v] = u;
sz[u] += sz[v];
merge_queries(queries[u], queries[v], w);
}
int main() {
ifstream cin("radiatie.in");
ofstream cout("radiatie.out");
cin >> n >> m >> k;
for (int i = 0; i < n; i++) {
parent[i] = i;
sz[i] = 1;
}
for (int i = 0; i < m; i++) {
int u, v, w;
cin >> u >> v >> w;
u--, v--;
edges[i] = {u, v, w};
}
for (int i = 0; i < k; i++) {
int x, y;
cin >> x >> y;
x--, y--;
queries[x].insert(i);
queries[y].insert(i);
}
sort(edges, edges + m,
[](const auto &e1, const auto &e2) { return e1.w < e2.w; });
for (int i = 0; i < m; i++) {
auto [u, v, w] = edges[i];
u = get_root(u);
v = get_root(v);
if (u != v) {
merge(u, v, w);
}
}
for (int i = 0; i < k; i++) {
cout << ans[i] << "\n";
}
return 0;
}