Pagini recente » Cod sursa (job #603253) | Cod sursa (job #716380) | Cod sursa (job #2557735) | Cod sursa (job #2737224) | Cod sursa (job #389859)
Cod sursa(job #389859)
#include<cstdio>
#include<algorithm>
using namespace std;
#define N 15001
#define M N<<1
#define minn(a,b) ((a>b)?(a):(b))
#include<vector>
vector<short int> x(M),y(M),dist(N,0),gr(N);
vector<int> z(M),c(N);
short int n,k,x1,y1,ind[M];
int m;
void df(short int x)
{
if (gr[x]==x)
{
dist[x]=1;
return;
}
df(gr[x]);
dist[x]=1+dist[gr[x]];
}
short int find(short int x)
{
if (gr[x]==x)
return x;
return find(gr[x]);
}
void apm()
{
for (short int i=1; i<=n; ++i)
gr[i]=i;
short int u,v;
for (short int i=1; i<=m; ++i)
{
u=find(x[ind[i]]);
v=find(y[ind[i]]);
if (u==v) continue;
gr[u]=v;
c[u]=z[ind[i]];
}
for (short int i=1; i<=n; ++i)
if (!dist[i])
df(i);
}
void solve(short int x,short int y)
{
if (dist[x]<dist[y])
swap(x,y);
while (dist[x]>dist[y])
{
m=minn(m,c[x]);
x=gr[x];
}
while (x!=y)
{
m=minn(m,c[x]);
m=minn(m,c[y]);
x=gr[x];
y=gr[y];
}
}
bool cmp(const short int &i,const short int&j)
{
return z[i]<z[j];
}
void citire()
{
freopen("radiatie.in","r",stdin);
freopen("radiatie.out","w",stdout);
scanf("%hd%d%hd",&n,&m,&k);
for (short int i=1; i<=m; ++i)
{
scanf("%hd%hd%d",&x[i],&y[i],&z[i]);
ind[i]=i;
}
sort(ind+1,ind+1+m,cmp);
apm();
while(k--)
{
scanf("%hd%hd",&x1,&y1);
m=0;
solve(x1,y1);
printf("%d\n",m);
}
}
int main()
{
citire();
return 0;
}