Pagini recente » Cod sursa (job #336053) | Cod sursa (job #2531941) | Cod sursa (job #430680) | Cod sursa (job #1900425) | Cod sursa (job #1303157)
#include <cstdio>
#include <algorithm>
#define nmax 1505
#define mmax 30003
using namespace std;
struct edges
{
int x, y, c;
}edge[mmax];
int n, m, x, y, c, dad[nmax], cost[nmax], level[nmax];
int k, i, dad1, dad2;
inline bool cmp(edges x, edges y)
{
return x.c<y.c;
}
inline int dad_determ(int x)
{
while(x!=dad[x])
x=dad[x];
return x;
}
void level_determ(int x)
{
if(dad[x]==x) return;
level_determ(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_determ(edge[i].x);
dad2=dad_determ(edge[i].y);
if(dad1!=dad2)
{
dad[dad1]=dad2;
cost[dad1]=edge[i].c;
}
}
for(i=1; i<=n; ++i)
level_determ(i);
int sol;
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, level[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;
}