Pagini recente » Cod sursa (job #1022536) | Cod sursa (job #2329878) | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #3313942)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin("radiatie.in");
ofstream cout("radiatie.out");
pair<int,pair<int,int>> v[30001];
int n,m,k,tata[15001],adan[15001],c[15001];
vector<int> v1[15001];
int find_tata(int a){
while(tata[a]) a=tata[a];
return a;
}
void dfs(int nod){
for(auto it:v1[nod]){
adan[it]=adan[nod]+1;
dfs(it);
}
}
int main()
{
int i,a,b,tata1,tata2,max1;
cin>>n>>m>>k;
for(i=1;i<=m;i++){
cin>>v[i].second.first>>v[i].second.second>>v[i].first;
}
sort(v+1,v+m+1);
for(i=1;i<=m;i++){///printf("%d %d| %d %d\n",v[i].second.first,tata[v[i].second.first],v[i].second.second,tata[v[i].second.second]);
tata1=find_tata(v[i].second.first);
tata2=find_tata(v[i].second.second);
if(tata1!=tata2){
tata[tata1]=tata2;
v1[tata2].push_back(tata1);
c[tata1]=v[i].first;
}
}
for(i=1;tata[i];i++);
dfs(i);
while(k){k--;
cin>>a>>b;
max1=0;
if(adan[a]<adan[b]) swap(a,b);
while(adan[a]>adan[b]){
max1=max(max1,c[a]);
a=tata[a];
}
while(a!=b){
max1=max(max1,max(c[a],c[b]));
a=tata[a];
b=tata[b];
}
cout<<max1<<"\n";
}
return 0;
}