Pagini recente » Cod sursa (job #739902) | Cod sursa (job #308777) | Cod sursa (job #3291537) | Cod sursa (job #980364) | Cod sursa (job #535388)
Cod sursa(job #535388)
#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],viz[Nmax],H[Nmax], Max[Nmax], TT[Nmax], C[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;
}
}
for( i = 1 ; i <= k ; i++ )
{
scanf("%d %d",&x,&y);
sol = 0 ;
viz[x] = i ;
Max[x] = 0 ;
for( ; x != TT[x] ; x = TT[x] )
{
viz[TT[x]] = i ;
if( Max[x] > C[x] )
Max[TT[x]] = Max[x] ;
else Max[TT[x]] = C[x] ;
}
for( ; viz[y] != i ; y = TT[y] )
if( sol < C[y] ) sol = C[y] ;
if( sol < Max[y] ) sol = Max[y];
printf("%d\n",sol);
}
return 0;
}