Pagini recente » Cod sursa (job #837237) | Cod sursa (job #1978984) | Cod sursa (job #884775) | Cod sursa (job #1362094) | Cod sursa (job #383625)
Cod sursa(job #383625)
#include <stdio.h>
#include <algorithm>
#include <vector>
#define NMAX 15001
#define LMAX 30001
using namespace std;
int n,m,k,ord[LMAX],rad[NMAX];
int grd[NMAX],cost[NMAX];
char viz[NMAX];
struct muchie
{
int a,b,c;
};
muchie A[LMAX];
void read()
{
scanf("%d%d%d",&n,&m,&k);
int i;
for (i=1; i<=m; i++)
{
scanf("%d%d%d",&A[i].a,&A[i].b,&A[i].c);
ord[i]=i;
}
}
bool comp(int x,int y)
{
if (A[x].c<A[y].c)
return 1;
return 0;
}
void init()
{
int i;
for (i=1; i<=n; i++)
rad[i]=i;
}
int root(int x)
{
while (rad[x]!=x)
x=rad[x];
return x;
}
void unire(int x,int y,int z)
{
rad[x]=y;
cost[x]=z;
}
void get_apm()
{
int i,x;
init();
for (i=1; i<=m; i++)
{
x=ord[i];
if (root(A[x].a)!=root(A[x].b))
unire(root(A[x].a),root(A[x].b),A[x].c);
}
}
void dfs(int nod)
{
viz[nod]=1;
if (rad[nod]==nod)
grd[nod]=1;
else
{
if (!viz[rad[nod]])
dfs(rad[nod]);
grd[nod]=grd[rad[nod]]+1;
}
}
void prep()
{
int i;
for (i=1; i<=n; i++)
if (!viz[i])
dfs(i);
}
inline int max(int x,int y)
{
return x>y ? x : y;
}
void solve_queries()
{
int i,x,y,t,rez;
for (i=1; i<=k; i++)
{
scanf("%d%d",&x,&y);
if (grd[x]<grd[y])
t=x,x=y,y=t;
rez=0;
for ( ; grd[x]>grd[y]; x=rad[x])
rez=max(rez,cost[x]);
for ( ; x!=y; x=rad[x],y=rad[y])
rez=max(rez,max(cost[x],cost[y]));
printf("%d\n",rez);
}
}
int main()
{
freopen("radiatie.in","r",stdin);
freopen("radiatie.out","w",stdout);
read();
sort(ord+1,ord+m+1,comp);
get_apm();
prep();
solve_queries();
return 0;
}