Pagini recente » Cod sursa (job #2923930) | Cod sursa (job #2894945) | Cod sursa (job #2433332) | Cod sursa (job #2708979) | Cod sursa (job #384946)
Cod sursa(job #384946)
#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],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(tt[x]==x){
dp[x]=1;
return;
}
df(tt[x]);
dp[x]=dp[tt[x]]+1;
}
void apm(){
int i,x,y,a,b;
for(i=0;i<m;++i){
x=nr[i].sc.fs;
y=nr[i].sc.sc;
a=tata(x);
b=tata(y);
if(a!=b){
tt[a]=b;
cost[a]=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];b=tt[b])
s=max(s,cost[b]);
for(;a!=b;a=tt[a],b=tt[b])
s=max(s,max(cost[a],cost[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)
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;
}