Pagini recente » Cod sursa (job #2672380) | Cod sursa (job #1435764) | Cod sursa (job #1149984) | Cod sursa (job #836425) | Cod sursa (job #1469841)
#include <iostream>
#include <stdio.h>
#include <algorithm>
#define NMax 15005
using namespace std;
struct Edges
{
int x,y,c;
}edges[NMax*2];
int N,M,K,x,y,level[NMax],cost[NMax],tata[NMax];
void Read()
{
freopen("radiatie.in","r",stdin);
scanf("%d%d%d",&N,&M,&K);
for(int i=1;i<=M;i++)
{
scanf("%d%d%d",&edges[i].x,&edges[i].y,&edges[i].c);
}
}
//freopen("radiatie.out","w",stdout);
inline bool comp(Edges x,Edges y)
{
return x.c<y.c;
}
inline int Radacina(int x)
{
while(x!=tata[x])
x=tata[x];
return x;
}
inline void Level(int x)
{
if(tata[x]==x)
return;
Level(tata[x]);
level[x]=level[tata[x]]+1;
}
void APM()
{
sort(edges+1,edges+M+1,comp);
for(int i=1;i<=N;i++)
tata[i]=i;
for(int i=1;i<=M;i++)
{
int radx=Radacina(edges[i].x);
int rady=Radacina(edges[i].y);
if(radx!=rady)
{
tata[radx]=rady;
cost[radx]=edges[i].c;
}
}
}
void LCA()
{
for(int i=1;i<=N;i++)
if(!level[i])
Level(i);
for(int i=1;i<=K;i++)
{
scanf("%d%d",&x,&y);
int Max=0;
while(level[x]<level[y])
{
Max=max(Max,cost[y]);
y=tata[y];
}
while(level[x]>level[y])
{
Max=max(Max,cost[x]);
x=tata[x];
}
while(x!=y)
{
Max=max(Max,cost[y]);
Max=max(Max,cost[x]);
x=tata[x];
y=tata[y];
}
printf("%d\n",Max);
}
}
int main()
{
freopen("radiatie.out","w",stdout);
Read();
APM();
LCA();
}