Pagini recente » Cod sursa (job #727852) | Cod sursa (job #1118343) | Cod sursa (job #2065724) | Cod sursa (job #173402) | Cod sursa (job #2491230)
#include <fstream>
#include <vector>
#include <algorithm>
#include <iostream>
#include <bitset>
#define dim 15010
using namespace std;
ifstream fin("radiatie.in");
ofstream fout("radiatie.out");
int n,m,T,k,i,j,q,x,y,rx,ry,t[dim],N[2*dim],C[dim],sol,R,vec,cost;
vector <pair<int,int> > l[dim];
bitset <2*dim> f;
struct muchii{
int x;
int y;
int c;
} v[2*dim];
bool cmp(const muchii &a, const muchii &b){
return a.c<b.c;
return 0;
}
int rad(int x){
while(t[x]>0)
x=t[x];
return x;
}
void upd(int x, int rx){
int y;
while(t[x]>0){
y=t[x];
t[x]=rx;
x=y;
}
}
void dfs(int nod,int niv){
f[nod]=1;
N[nod]=niv;
for(int i=0;i<l[nod].size();i++){
vec=l[nod][i].first;
cost=l[nod][i].second;
if(!f[vec]){
t[vec]=nod;
C[vec]=cost;
dfs(vec,niv+1);
}
}
}
int main(){
fin>>n>>m>>T;
for(q=1;q<=m;q++)
fin>>v[q].x>>v[q].y>>v[q].c;
sort(v+1,v+m+1,cmp);
for(i=1;i<=n;i++)
t[i]=-1;
for(q=1;q<=m;q++){
x=v[q].x; y=v[q].y;
rx=rad(x); upd(x,rx);
ry=rad(y); upd(y,ry);
if(rx!=ry){
if(t[rx]<t[ry]){
t[rx]+=t[ry];
t[ry]=rx;
R=rx;
}else{
t[ry]+=t[rx];
t[rx]=ry;
R=ry;
}
///cout<<x<<" "<<y<<" "<<v[q].c<<"\n";
l[x].push_back(make_pair(y,v[q].c));
l[y].push_back(make_pair(x,v[q].c));
}
}
N[R]=1; t[R]=0;
dfs(R,1);
for(;T;T--){
fin>>i>>j;
sol=-1;
while(N[i]>N[j]){
sol=max(sol,C[i]);
i=t[i];
}
while(N[j]>N[i]){
sol=max(sol,C[j]);
j=t[j];
}
while(i!=j){
sol=max(sol,max(C[i],C[j]));
i=t[i];
j=t[j];
}
fout<<sol<<"\n";
}
return 0;
}