Pagini recente » Cod sursa (job #2408638) | Cod sursa (job #2073510) | Cod sursa (job #1804681) | Cod sursa (job #2066502) | Cod sursa (job #1303164)
#include <cstdio>
#include <algorithm>
#define nmax 15010
#define mmax 30010
using namespace std;
int dad1, dad2, n, m, i, k, sol, x, y, dad[nmax], level[nmax], cost[nmax];
struct edges
{
int x, y, c;
}edge[30100];
inline bool cmp(edges x,edges y)
{
return x.c<y.c;
}
inline int dad_det(int x)
{
while(x!=dad[x])
x=dad[x];
return x;
}
void level_det(int x)
{
if(dad[x]==x) return ;
level_det(dad[x]);
level[x]=level[dad[x]]+1;
}
int main()
{
freopen("radiatie.in", "rt", stdin);
freopen("radiatie.out", "wt", stdout);
scanf("%d%d%d", &n, &m, &k);
for(i=1; i<=m; ++i)
scanf("%d%d%d", &edge[i].x, &edge[i].y, &edge[i].c);
sort(edge+1, edge+m+1, cmp);
for(i=1; i<=n; ++i) dad[i]=i;
for(i=1; i<=m; ++i)
{
dad1=dad_det(edge[i].x);
dad2=dad_det(edge[i].y);
if(dad1!=dad2)
{
dad[dad1]=dad2;
cost[dad1]=edge[i].c;
}
}
for(i=1; i<=n; ++i)
if(!level[i]) level_det(i);
for(i=1; i<=k; ++i)
{
scanf("%d%d", &x, &y);
sol=0;
while(level[x]<level[y])
{
sol=max(sol, cost[y]);
y=dad[y];
}
while(level[x]>level[y])
{
sol=max(sol, cost[x]);
x=dad[x];
}
while(x!=y)
{
sol=max(sol,cost[x]);
sol=max(sol,cost[y]);
x=dad[x];
y=dad[y];
}
printf("%d\n", sol);
}
return 0;
}