Pagini recente » Cod sursa (job #708225) | Cod sursa (job #92219) | Cod sursa (job #879893) | Cod sursa (job #1740820) | Cod sursa (job #678838)
Cod sursa(job #678838)
#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;
}