Pagini recente » Cod sursa (job #1089253) | Cod sursa (job #1000906) | Cod sursa (job #1622871) | Cod sursa (job #2280602) | Cod sursa (job #1303629)
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
struct E { int x,y,v; } e[30003];
int n,m,k,t[15003],lv[15003],c[15003];
vector < int > g[15003];
bool cmp(E a,E b) { return a.v<b.v; }
int root(int x)
{
while(t[x])
x=t[x];
return x;
}
void dfs(int nod)
{
for(int i=0;i<g[nod].size();++i)
{
lv[g[nod][i]]=lv[nod]+1;
dfs(g[nod][i]);
}
}
int main()
{
freopen("radiatie.in","r",stdin);freopen("radiatie.out","w",stdout);
int i,x,y,Max;
scanf("%d %d %d",&n,&m,&k);
for(i=0;i<m;++i)
scanf("%d %d %d",&e[i].x,&e[i].y,&e[i].v);
sort(e,e+m,cmp);
for(i=0;i<m;++i)
{
x=root(e[i].x);
y=root(e[i].y);
if(x!=y)
{
t[x]=y;
g[y].push_back(x);
c[x]=e[i].v;
}
}
for(i=1;t[i];++i);
dfs(i);
while(k--)
{
scanf("%d %d",&x,&y);
Max=0;
if(lv[x]<lv[y])
swap(x,y);
while(lv[x]>lv[y])
{
Max=max(Max,c[x]);
x=t[x];
}
while(x!=y)
{
Max=max(Max,max(c[x],c[y]));
x=t[x];
y=t[y];
}
printf("%d\n",Max);
}
return 0;
}