Pagini recente » Cod sursa (job #2707119) | Cod sursa (job #1810891) | Cod sursa (job #2880443) | Cod sursa (job #2920316) | Cod sursa (job #3281727)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("radiatie.in");
ofstream g("radiatie.out");
struct bongos
{
int x,y,c;
}v[300005];
int n,m,k,i,t[15005],h[15005],c[15005],a,b,s;
int rad(int x)
{
while(x!=t[x]) x=t[x];
return x;
}
void unif(int x,int y,int cost)
{
int rx=rad(x);
int ry=rad(y);
if(h[rx]<h[ry])
{
t[rx]=ry;
c[rx]=cost;
h[ry]+=h[rx];
}
else
{
t[ry]=rx;
c[ry]=cost;
h[rx]+=h[ry];
}
}
int cmp(bongos a,bongos b)
{
return a.c<b.c;
}
void apm()
{
sort(v+1,v+m+1,cmp);
for(int i=1;i<=m;i++)
if(rad(v[i].x)!=rad(v[i].y))
unif(v[i].x,v[i].y,v[i].c);
}
int main()
{
f>>n>>m>>k;
for(i=1;i<=m;i++)
f>>v[i].x>>v[i].y>>v[i].c;
for(i=1;i<=n;i++)
{
t[i]=i;
h[i]=1;
}
apm();
for(i=1;i<=k;i++)
{
f>>a>>b;
s=0;
//cout<<a<<" "<<b<<endl;
int ra=a,nva=0;
while(ra!=t[ra])
{
ra=t[ra];
nva++;
}
int rb=b,nvb=0;
while(rb!=t[rb])
{
rb=t[rb];
nvb++;
}
//cout<<nva<<" "<<nvb<<endl;
if(nva<nvb)
{
swap(a,b);
swap(nva,nvb);
}
while(nva>nvb)
{
s=max(s,c[a]);
a=t[a];
nva--;
}
while(a!=b)
{
s=max(s,max(c[a],c[b]));
a=t[a];
b=t[b];
}
g<<s<<'\n'<<'\n';
}
return 0;
}