Pagini recente » Cod sursa (job #1413976) | Cod sursa (job #1672854) | Cod sursa (job #2105535) | Cod sursa (job #1415966) | Cod sursa (job #2103360)
#include <bits/stdc++.h>
using namespace std;
vector <int> G[15003],C[15003];
int T[15002],p[15003],x,y,m,k,nr,ok,ap[15003],n,ceva,ct;
struct meh{
int x,y,c;
}u[30003];
bool cmp(meh x,meh y)
{
return x.c<y.c;
}
int root (int x)
{
while(T[x]!=x)
x=T[x];
return x;
}
void unif(int x,int y)
{
if(p[x]<p[y])
T[x]=y;
if(p[x]>p[y])
T[y]=x;
if(p[x]==p[y])
{
T[y]=x;
p[x]++;
}
}
int dfs(int x)
{
if (x==y) return 1;
int ok=0;
int o;
ap[x]=1;
for (int i=0; i<G[x].size(); i++){
o=0;
if (ap[G[x][i]]==0) o=dfs(G[x][i]);
if (o) {if (C[x][i]>nr) nr=C[x][i]; ok=1;}
}
return ok;
}
int main()
{
freopen("radiatie.in","r",stdin);
freopen("radiatie.out","w",stdout);
scanf("%d%d%d",&n,&m,&ceva);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&u[i].x,&u[i].y,&u[i].c);
T[i]=i;
}
sort(u+1,u+m+1,cmp);
int i=1;
while(k<n-1)
{
int rx=root(u[i].x);
int ry=root(u[i].y);
if(rx!=ry)
{
k++;
ct+=u[i].c;
G[u[i].x].push_back(u[i].y);
C[u[i].x].push_back(u[i].c);
G[u[i].y].push_back(u[i].x);
C[u[i].y].push_back(u[i].c);
unif(rx,ry);
}
i++;
}
while(ceva--)
{
memset(ap,0,sizeof(ap));
scanf("%d%d",&x,&y);
nr=0,ok=0;
dfs(x);
printf("%d\n",nr);
}
return 0;
}