Cod sursa(job #384935)
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
#define fs first
#define sc second
typedef pair <int,int> hh;
typedef pair <int, hh> gg;
vector <gg> nr;
int n,m,k;
int tt[15100],T[15100],cost[15100],dp[15100];
int tata(int x){
if(tt[x]==x)
return x;
return tata(tt[x]);
}
void df(int x){
if(dp[x])
return;
if(T[x]==x){
dp[x]=1;
return;
}
df(T[x]);
dp[x]=dp[T[x]]+1;
}
void apm(){
int i,x,y;
for(i=0;i<m;++i){
x=nr[i].sc.fs;
y=nr[i].sc.sc;
if(tata(x)!=tata(y)){
tt[x]=y;
T[x]=y;
cost[x]=nr[i].fs;
}
}
for(i=1;i<=n;++i){
if(!dp[i])
df(i);
}
}
inline int max(int a,int b){
return a>b?a:b;
}
int solve(int a,int b){
int s=0,ax;
if(dp[b]<dp[a]){
ax=a;
a=b;
b=ax;
}
for(;dp[a]<dp[b];s=max(s,cost[b]),b=T[b]);
for(;a!=b;s=max(s,max(cost[a],cost[b])),a=T[a],b=T[b]);
return s;
}
int main(){
freopen("radiatie.in","r",stdin);
freopen("radiatie.out","w",stdout);
int a,b,c,i;
scanf("%d%d%d",&n,&m,&k);
for(i=0;i<m;++i){
scanf("%d%d%d",&a,&b,&c);
nr.push_back(gg(c,hh(a,b)));
}
sort(nr.begin(),nr.end());
for(i=1;i<=n;++i)
T[i]=tt[i]=i;
apm();
for(i=0;i<k;++i){
scanf("%d%d",&a,&b);
printf("%d\n",solve(a,b));
}
fclose(stdin);
fclose(stdout);
return 0;
}