Pagini recente » Cod sursa (job #1004142) | Cod sursa (job #2539444) | Cod sursa (job #1882706) | Cod sursa (job #1802426) | Cod sursa (job #546019)
Cod sursa(job #546019)
#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],C[Nmax],viz[Nmax],Max[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 , C[y] = M[i].c ;
else T[x] = y , C[x] = M[i].c ;
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++ )
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);
}
for( i = 1 ; i <= k ; i++ )
{
scanf("%d %d",&x,&y);
sol = 0 ;
cnt++; Max[x] = 0 ; viz[x] = cnt ;
for( ; x != T[x] ; x = T[x] )
{
if( C[x] > sol ) sol = C[x] ;
Max[T[x]] = sol ;
viz[T[x]] = cnt ;
}
sol = 0 ;
for( ; viz[y] != cnt ; y = T[y] )
if( C[y] > sol ) sol = C[y] ;
if( Max[y] > sol ) sol = Max[y];
printf("%d\n",sol);
}
return 0;
}