Pagini recente » Cod sursa (job #72630) | Cod sursa (job #2218881) | Cod sursa (job #2863849) | Cod sursa (job #2866168) | Cod sursa (job #1016314)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("radiatie.in");
ofstream g("radiatie.out");
int t1,t2,n,m,i,k,sol,x,y,t[15010],niv[15010],cost[15100];
struct muchie{int x,y,c;};
muchie mu[30100];
inline bool cmp(muchie x,muchie y)
{
return x.c<y.c;
}
inline int tata(int x)
{
while(x!=t[x])
x=t[x];
return x;
}
inline void nivel(int x)
{
if(t[x]==x)
return ;
nivel(t[x]);
niv[x]=niv[t[x]]+1;
}
int main()
{
f>>n>>m>>k;
for(i=1;i<=m;++i)
{
f>>mu[i].x>>mu[i].y>>mu[i].c;
}
sort(mu+1,mu+m+1,cmp);
for(i=1;i<=n;++i)
t[i]=i;
for(i=1;i<=m;++i)
{
t1=tata(mu[i].x);
t2=tata(mu[i].y);
if(t1!=t2)
{
t[t1]=t2;
cost[t1]=mu[i].c;
}
}
for(i=1;i<=n;++i)
if(!niv[i])
nivel(i);
for(i=1;i<=k;++i)
{
f>>x>>y;
sol=0;
while(niv[x]<niv[y])
{
sol=max(sol,cost[y]);
y=t[y];
}
while(niv[x]>niv[y])
{
sol=max(sol,cost[x]);
x=t[x];
}
while(x!=y)
{
sol=max(sol,cost[x]);
sol=max(sol,cost[y]);
x=t[x];
y=t[y];
}
g<<sol<<'\n';
}
return 0;
}