Pagini recente » Cod sursa (job #543807) | Cod sursa (job #2235559) | Cod sursa (job #2048343) | Cod sursa (job #2787427) | Cod sursa (job #918238)
Cod sursa(job #918238)
#include <fstream>
#include <vector>
#include <cstring>
#include <queue>
#include <algorithm>
#define pii pair<int,int>
#define x first
#define y second
#define mp make_pair
using namespace std;
ifstream cin("radiatie.in");
ofstream cout("radiatie.out");
const int NMAX = 15002;
int N, M, K;
pair<int,pii> E[NMAX<<1];
int T[NMAX], cost[NMAX], rang[NMAX], lvl[NMAX];
void readData() {
cin>>N>>M>>K;
for(int i = 0;i < M;i++) {
cin>>E[i].y.x>>E[i].y.y>>E[i].x;
}
}
int getRoot(int v) {
for(;v != T[v];v = T[v]);
return v;
}
int getLvl(int v) {
if(T[v] == v) return lvl[v] = 1;
if(lvl[v] != 0) {
return lvl[v];
}
return lvl[v] = 1 + getLvl(T[v]);
}
int main()
{
readData();
sort(E,E + M);
for(int i = 1;i <= N;i++) {
T[i] = i;
}
for(int i = 0, e = 0;e < N - 1;i++) {
int ra = getRoot(E[i].y.x);
int rb = getRoot(E[i].y.y);
if(ra != rb) {
e++;
if(rang[ra] < rang[rb]) {
T[ra] = rb;
cost[ra] = E[i].x;
rang[rb]++;
} else {
T[rb] = ra;
cost[rb] = E[i].x;
rang[ra]++;
}
}
}
for(int i = 1;i <= N;i++) {
if(!lvl[i]) {
lvl[i] = getLvl(i);
}
}
int a, b;
for(int i = 0;i < K;i++) {
cin>>a>>b;
int r = 0;
while(a != b) {
if(lvl[a] > lvl[b]) {
r = max(r,cost[a]);
a = T[a];
} else {
r = max(r,cost[b]);
b = T[b];
}
}
cout<<r<<"\n";
}
return 0;
}