Pagini recente » Cod sursa (job #1059940) | Cod sursa (job #1948891) | Cod sursa (job #2105725) | Cod sursa (job #818974) | Cod sursa (job #2103358)
#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]++;
}
}
void dfs(int x)
{
if(x==y)
ok=1;
if(ok)return;
else if(ok==0){
ap[x]=1;
int sz=G[x].size();
for(int i=0;i<sz;i++)
if(!ap[G[x][i]]){
if(ok)return;
dfs(G[x][i]);
if(nr<C[x][i]) nr=C[x][i];
if(ok) return;
}
}
}
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;
}