Pagini recente » Cod sursa (job #1680219) | Cod sursa (job #909924) | Cod sursa (job #2869157) | Cod sursa (job #1729585) | Cod sursa (job #1787034)
#include <bits/stdc++.h>
using namespace std;
const int SPQR = 15005;
struct EDGE {
int u, v, c;
bool operator < (const EDGE &arg) const {
return c < arg.c; } };
int uf_far[SPQR], uf_siz[SPQR], lvl[SPQR];
vector<EDGE> g[SPQR], apm[SPQR], edgs;
pair<int, int> far[SPQR];
void join(int a, int b) {
while(uf_far[a]) a = uf_far[a];
while(uf_far[b]) b = uf_far[b];
if(uf_siz[a] < uf_siz[b]) {
uf_far[b] = uf_far[a];
uf_siz[b]+= uf_siz[a]; }
else {
uf_far[a] = uf_far[b];
uf_siz[a]+= uf_siz[b]; } }
bool same(int a, int b) {
while(uf_far[a]) a = uf_far[a];
while(uf_far[b]) b = uf_far[b];
return a == b; }
void dfs(int u) {
for(auto v: apm[u]) if(!lvl[v.v]) {
lvl[v.v] = lvl[u] + 1;
far[v.v] = make_pair(u, v.c);
dfs(v.v); } }
void make_apm(void) {
sort(edgs.begin(), edgs.end());
for(auto i: edgs) {
if(!same(i.u, i.v)) {
join(i.u, i.v);
apm[i.u].push_back({i.u, i.v, i.c});
apm[i.v].push_back({i.v, i.u, i.c}); } } }
int main(void) {
ifstream fi("radiatie.in");
ofstream fo("radiatie.out");
int n, m, q, x, y, c, r;
for(int i=1; i<SPQR; ++i)
uf_siz[i] = 1;
fi >> n >> m >> q;
edgs.resize(m);
for(auto &i: edgs) {
fi >> x >> y >> c;
g[x].push_back({x, y, c});
g[y].push_back({y, x, c});
i = {x, y, c}; }
lvl[1] = 1;
make_apm();
dfs(1);
while(q--) {
r = 0;
fi >> x >> y;
while(lvl[x] != lvl[y]) {
if(lvl[x] > lvl[y]) {
r = max(far[x].second, r);
x = far[x].first; }
else {
r = max(far[y].second, r);
y = far[y].first; } }
fo << r << '\n'; }
return 0; }