Pagini recente » Cod sursa (job #2374261) | Cod sursa (job #2690730) | Cod sursa (job #3293143) | Cod sursa (job #1993680) | Cod sursa (job #3351669)
#include <bits/stdc++.h>
#define in fin
#define out fout
#define f first
#define s second
using namespace std;
ifstream fin ("radiatie.in");
ofstream fout ("radiatie.out");
int n, m, k, x, y, maxim;
struct much{
int a, b, c;
};
much e[30005];
bool cmp(much a, much b){
return a.c < b.c;
}
int p[15005], d[15005];
void find_father(int nod){
if(p[nod] != p[p[nod]]){
find_father(p[nod]);
p[nod] = p[p[nod]];
}
}
vector < pair <int, int> > v[15005];
pair <int, int> unc[16][15005];
void dfs(int nod, int nig){
d[nod] = d[nig] + 1;
for(int i = 0; i < v[nod].size(); i++){
if(v[nod][i].f != nig){
unc[0][v[nod][i].f] = {nod, v[nod][i].s};
dfs(v[nod][i].f, nod);
}
}
}
void build_sparse_table(){
for(int i = 1; (1 << i) <= n; i++){
for(int j = 1; j <= n; j++){
unc[i][j] = {unc[i-1][unc[i-1][j].f].f,
max(unc[i-1][j].s, unc[i-1][unc[i-1][j].f].s)};
}
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
in >> n >> m >> k;
for(int i = 1; i <= n; i++){
p[i] = i;
}
for(int i = 1; i <= m; i++){
in >> e[i].a >> e[i].b >> e[i].c;
}
sort(e + 1, e + m + 1, cmp);
for(int i = 1; i <= m; i++){
find_father(e[i].a);
find_father(e[i].b);
if(p[e[i].a] != p[e[i].b]){
p[p[e[i].b]] = p[e[i].a];
v[e[i].a].push_back({e[i].b, e[i].c});
v[e[i].b].push_back({e[i].a, e[i].c});
}
}
dfs(1, 0);
build_sparse_table();
while(k--){
in >> x >> y;
maxim = 0;
for(int i = 15; i >= 0; i--){
if(d[unc[i][x].f] >= d[y]){
maxim = max(maxim, unc[i][x].s);
x = unc[i][x].f;
}
else if(d[unc[i][y].f] >= d[x]){
maxim = max(maxim, unc[i][y].s);
y = unc[i][y].f;
}
}
for(int i = 15; i >= 0; i--){
if(unc[i][x].f != unc[i][y].f){
maxim = max(maxim, max(unc[i][x].s, unc[i][y].s));
x = unc[i][x].f;
y = unc[i][y].f;
}
}
if(x != y){
maxim = max(maxim, max(unc[0][x].s, unc[0][y].s));
}
out << maxim << "\n";
}
return 0;
}