Pagini recente » Cod sursa (job #2891820) | Cod sursa (job #646997) | Cod sursa (job #1077446) | Cod sursa (job #2802086) | Cod sursa (job #2517359)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
struct muc{
int a, b;
int v;
bool operator<(const muc &rhs){
return v < rhs.v;
}
};
ifstream fin("radiatie.in");
ofstream fout("radiatie.out");
int n, m, k;
vector<muc> gra;
int tre[15041], wei[15041], woe[15041];
void nuke(){
for(int i = 1; i <= n; ++i){
tre[i] = i;
wei[i] = 1;
}
}
int dad(int a){
while(tre[a] != a){
a = tre[a];
}
return a;
}
void we(int a, int b, int v){
tre[a] = b;
wei[b] += wei[a];
woe[a] = v;
}
int unit(int a, int b, int v){
a = dad(a);
b = dad(b);
if(wei[a] < wei[b]){
we(a, b, v);
}else{
we(b, a, v);
}
}
int teit(int a, int b){
return dad(a)==dad(b);
}
void prepre(){
nuke();
sort(gra.begin(), gra.end());
for(int i = 0; i < m; ++i){
muc x = gra[i];
if(!teit(x.a, x.b)){
unit(x.a, x.b, x.v);
}
}
}
int supa(int a, int b){
int maxi = 0;
while(a != b){
int x;
if(wei[a] < wei[b]){
x = woe[a];
a = tre[a];
}else{
x = woe[b];
b = tre[b];
}
maxi = max(maxi, x);
}
return maxi;
}
int main(){
fin >> n >> m >> k;
for(int i = 0; i < m; ++i){
muc x;
fin >> x.a >> x.b >> x.v;
gra.push_back(x);
}
prepre();
for(int i = 0; i < k; ++i){
muc x;
fin >> x.a >> x.b;
fout << supa(x.a, x.b) << "\n";
}
return 0;
}