Pagini recente » Cod sursa (job #1447214) | Cod sursa (job #2551347) | Cod sursa (job #2041611) | Cod sursa (job #1707467) | Cod sursa (job #2477467)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fin("radiatie.in");
ofstream fout("radiatie.out");
int n,m,k,i,x,y,c,tata[15005],K,s;
int nivel[15005],cost[15005];
struct nr{
int x,y,c;
}a[30005];
struct arc{
int nod,cost;
};
int cmp(nr a, nr b){
return a.c < b.c;
}
vector <int> g[15005];
int parinte(int nod){
while(tata[nod]>0)
nod = tata[nod];
return nod;
}
void dfs(int nod, int niv){
nivel[nod] = niv;
for(int i=0;i<g[nod].size();i++)
// if(!nivel[g[nod][i].nod])
dfs(g[nod][i],niv+1);
}
int main(){
fin>>n>>m>>K;
for(i=1;i<=m;i++){
fin>>x>>y>>c;
a[i].x=x;
a[i].y=y;
a[i].c=c;
}
sort(a+1,a+m+1,cmp);
for(i=1;i<=n;i++)
tata[i]=-1;
i=1; k=n-1;
while(k>0){
x = parinte(a[i].x);
y = parinte(a[i].y);
if(x != y){
if(tata[x]<tata[y]){
tata[x]+=tata[y];
tata[y]=x;
cost[y]=a[i].c;
g[x].push_back({y});
s=x;
}
else{
tata[y]+=tata[x];
tata[x]=y;
cost[x]=a[i].c;
g[y].push_back({x});
s=y;
}
k--;
}
i++;
}
dfs(s,1);
for(i=1;i<=K;i++){
fin>>x>>y;
int Max = 0;
while(nivel[x]>nivel[y]){
Max=max(Max,cost[x]);
x=tata[x];
}
while(nivel[y]>nivel[x]){
Max=max(Max,cost[y]);
y=tata[y];
}
while(x!=y){
Max=max(Max,max(cost[y],cost[x]));
x=tata[x];
y=tata[y];
}
fout<<Max<<'\n';
}
return 0;
}