Pagini recente » Cod sursa (job #182557) | Cod sursa (job #2894551) | Cod sursa (job #2050786) | Cod sursa (job #2793546) | Cod sursa (job #2158964)
# include <fstream>
# include <algorithm>
# include <vector>
# define DIM 30010
# define c first.first
# define x first.second
# define y second
# define f first
# define s second
using namespace std;
ifstream fin("radiatie.in");
ofstream fout("radiatie.out");
vector<pair<int,int> > Lista[DIM];
pair<pair<int,int>,int> v[DIM];
int t[20][DIM],d[20][DIM],tata[DIM],niv[DIM];
int n,k,m,a,b,i,j,step,ra,rb,sol;
int rad(int a){
int b=a;
while(tata[a]>0)
a=tata[a];
while(tata[b]>0){
int aux=b;
b=tata[b];
tata[aux]=a;
}
return a;
}
void dfs(int nc){
for(int i=0;i<Lista[nc].size();i++){
int nv=Lista[nc][i].f;
int cost=Lista[nc][i].s;
if(t[0][nv]==0){
t[0][nv]=nc;
niv[nv]=niv[nc]+1;
d[0][nv]=cost;
dfs(nv);
}
}
}
int main () {
fin>>n>>m>>k;
for(i=1;i<=n;i++)
tata[i]=-1;
for(i=1;i<=m;i++)
fin>>v[i].x>>v[i].y>>v[i].c;
sort(v+1,v+m+1);
for(i=1;i<=m;i++){
a=v[i].x;
b=v[i].y;
ra=rad(a);
rb=rad(b);
if(ra!=rb){
Lista[a].push_back(make_pair(b,v[i].c));
Lista[b].push_back(make_pair(a,v[i].c));
if(t[ra]<t[rb]){
tata[ra]+=tata[rb];
tata[rb]=ra;
}
else{
tata[rb]+=tata[ra];
tata[ra]=rb;
}
}
}
t[0][1]=-1;
niv[1]=1;
dfs(1);
t[0][1]=0;
for(j=1;(1<<j)<=n;j++)
for(i=1;i<=n;i++){
t[j][i]=t[j-1][t[j-1][i]];
d[j][i]=max(d[j-1][i],d[j-1][t[j-1][i]]);
}
for(i=1;i<=k;i++){
fin>>a>>b;
if(niv[a]<niv[b])
swap(a,b);
sol=0;
if(niv[a]>niv[b]){
for(j=1;(1<<(j-1))<=n;j++);
for(;j>=0;j--)
if(niv[t[j][a]]>=niv[b]){
sol=max(sol,d[j][a]);
a=t[j][a];
}
}
if(a==b){
fout<<sol<<"\n";
continue;
}
for(j=1;(1<<(j-1))<=n;j++);
for(;j>=0;j--){
if(t[j][a]!=t[j][b]){
sol=max(sol,d[j][a]);
sol=max(sol,d[j][b]);
a=t[j][a];
b=t[j][b];
}
}
sol=max(sol,d[0][a]);
sol=max(sol,d[0][b]);
//fout<<sol<<"\n";
}
return 0;
}