Pagini recente » Cod sursa (job #772209) | Cod sursa (job #1774477) | Clasament oni_2010 | Cod sursa (job #1809845) | Cod sursa (job #1162387)
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
ifstream in("radiatie.in");
ofstream out("radiatie.out");
struct elem {int x;int y;int cost;}Muc[30010];
int N,M,K;
int Tata[15010],Cost[15010],Nivel[15010];
int a,b;
vector <int> Muchie[15010];
bool cmp(elem A,elem B) {
return (A.cost<B.cost);
}
void citired() {
int i;
in>>N>>M>>K;
for(i=1;i<=M;i++)
in>>Muc[i].x>>Muc[i].y>> Muc[i].cost;
}
bool dif_lant(){
if(a!=b)
return 1;
return 0;
}
void arbore_part() {
int i;
sort(Muc+1,Muc+M+1,cmp);
for(i=1;i<=M;i++) {
a=Muc[i].x;
while(Tata[a])
a=Tata[a];
b=Muc[i].y;
while(Tata[b])
b=Tata[b];
if(a!=b){
Tata[a]=b;
Muchie[b].push_back(a);
Cost[a]=Muc[i].cost;
}
}
}
void Dfs(int nod) {
int i,vecin;
for(i=0;i<Muchie[nod].size();i++) {
vecin=Muchie[nod][i];
Nivel[vecin]=Nivel[nod]+1;
Dfs(vecin);
}
}
void solve() {
int i,maxim,rad,x,y;
arbore_part();
for(i=1;i<=N;i++)
if(!Tata[i]){
rad=i;
break;
}
Dfs(rad);
for(i=1;i<=K;i++) {
in>>x>>y;
maxim=-1;
if(Nivel[x]<Nivel[y])
swap(x,y);
while(Nivel[x]>Nivel[y]) {
maxim=max(maxim,Cost[x]);
x=Tata[x];
}
while(x!=y) {
maxim=max(maxim,max(Cost[x],Cost[y]));
x=Tata[x];
y=Tata[y];
}
out<<maxim<<'\n';
}
in.close();
out.close();
}
int main() {
citired();
solve();
return 0;
}