Pagini recente » Cod sursa (job #1050662) | Cod sursa (job #1740259) | Cod sursa (job #1155604) | Cod sursa (job #1759526) | Cod sursa (job #3183288)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
vector<int>G[15001];
int tata[15001],cost[15001];
ifstream fin("radiatie.in");
ofstream fout("radiatie.out");
struct abc{
int i; int j; int cost;
}v[30001];
bool cmp(abc a,abc b){
return a.cost<b.cost;
}
int root(int nod){
while(tata[nod]>0)
nod=tata[nod];
return nod;
}
int n,m,q,radacina,nivel[15001];
void dfs(int nod,int lvl){
nivel[nod]=lvl;
for(auto x : G[nod])
dfs(x,lvl+1);
}
int main(){
fin>>n>>m>>q;
for(int i=1;i<=m;i++){
fin>>v[i].i>>v[i].j>>v[i].cost;
}
for(int i=1;i<=n;i++)
tata[i]=-1;
sort(v+1,v+m+1,cmp);
int k=0;
for(int i=1;k<n-1;i++){
/// adasug muchia i ( candidatra)
/// verific
int rx = root(v[i].i);
int ry = root(v[i].j);
if(rx!=ry){
k++;
if(tata[rx]<tata[ry]){
/// pun in rx
G[rx].push_back(ry);
cost[ry]=v[i].cost;
tata[rx]+=tata[ry];
tata[ry]=rx;
radacina = rx;
}
else{
G[ry].push_back(rx);
cost[rx]=v[i].cost;
tata[ry]+=tata[rx];
tata[rx]=ry;
radacina = ry;
}
}
}
dfs(radacina,1);
while(q--){
int x,y; fin>>x>>y;
int max0=-1000000000;
while(nivel[x]>nivel[y])
max0=max(max0,cost[x]),x=tata[x];
while(nivel[y]>nivel[x])
max0=max(max0,cost[y]),y=tata[y];
max0=max(max0,max(cost[x],cost[y]));
fout<<max0<<'\n';
}
return 0;
}