Pagini recente » Cod sursa (job #2529755) | Cod sursa (job #2584959) | Cod sursa (job #1116152) | Cod sursa (job #3281361) | Cod sursa (job #535397)
Cod sursa(job #535397)
#include<stdio.h>
#include<algorithm>
#define Nmax 15010
#define Mmax 30010
using namespace std;
struct muchie { int x,y,c ; } M[Mmax];
int T[Nmax],H[Nmax],TT[Nmax],C[Nmax],nivel[Nmax] ;
int n,i,m,cnt,sol,k,x,y ;
int find ( int x )
{
for( ; x != T[x] ; x = T[x] ) ;
return x ;
}
void uneste ( int x, int y )
{
if( H[x] >= H[y] ) T[y] = x ;
else T[x] = y ;
if( H[x] == H[y] ) H[x]++;
}
int cmp ( muchie a, muchie b )
{
return a.c < b.c ;
}
int main()
{
freopen("radiatie.in","r",stdin);
freopen("radiatie.out","w",stdout);
scanf("%d %d %d",&n,&m,&k);
for( i = 1 ; i <= m ; i++ )
scanf("%d %d %d",&M[i].x,&M[i].y,&M[i].c);
for( i = 1 ; i <= n ; i++ )
TT[i] = T[i] = i ;
sort(M+1,M+m+1,cmp);
for( i = 1 ; i <= m ; i++ )
{
x = find(M[i].x) ;
y = find(M[i].y) ;
if( x != y )
{
uneste(x,y);
TT[M[i].y] = M[i].x;
C[M[i].y] = M[i].c;
nivel[M[i].y] = nivel[M[i].x] + 1 ;
}
}
for( i = 1 ; i <= k ; i++ )
{
scanf("%d %d",&x,&y);
sol = 0 ;
while( x != y )
{
if( nivel[x] > nivel[y] )
{
if( sol < C[x] ) sol = C[x] ;
x = TT[x] ;
}
else
{
if( sol < C[y] ) sol = C[y] ;
y = TT[y] ;
}
}
printf("%d\n",sol);
}
return 0;
}