Pagini recente » Cod sursa (job #2037934) | Cod sursa (job #2801682) | Cod sursa (job #2050770) | Cod sursa (job #1523790) | Cod sursa (job #388031)
Cod sursa(job #388031)
#include<cstdio>
#define N 151
#include<algorithm>
#include<bitset>
#include<vector>
#define maxim(a,b) ((a>b)? (a):(b))
#define pb push_back
using namespace std;
int z[N],x[N],y[N],gr[N],rang[N],n,m,t,ind[N],c[N][N],rez;
int x1,y1;
bitset<N> viz;
bool ok;
vector<int> a[N];
bool cmp(const int &i,const int &j)
{
return z[i]<z[j];
}
void unesc(int x,int y)
{
if (rang[x]<rang[y])
gr[x]=y;
else
{
gr[y]=x;
rang[x]+=(rang[x]==rang[y]);
}
}
int find(int x)
{
if (gr[x]!=x)
gr[x]=find(gr[x]);
return gr[x];
}
void apm()
{
for (int i=1; i<=n; ++i)
{
gr[i]=i;
rang[i]=1;
}
int num=0;
for (int i=1; i<=m&&num<n-1; ++i)
{
int u=find(x[ind[i]]),v=find(y[ind[i]]);
if (u!=v)
{
unesc(u,v);
++num;
a[x[ind[i]]].pb(y[ind[i]]);
a[y[ind[i]]].pb(x[ind[i]]);
c[x[ind[i]]][y[ind[i]]]=z[ind[i]];
c[y[ind[i]]][x[ind[i]]]=z[ind[i]];
}
}
}
void df(int n,int maxx)
{
viz[n]=1;
size_t g=a[n].size();
if (n==y1)
{
ok=true;
rez=maxx;
return;
}
if (ok)
return;
for (size_t i=0; i<g; ++i)
{
if (viz[a[n][i]])
continue;
df(a[n][i],maxim(maxx,c[n][a[n][i]]));
if (ok)
return;
}
}
void citire()
{
freopen("radiatie.in","r",stdin);
freopen("radiatie.out","w",stdout);
scanf("%d%d%d",&n,&m,&t);
for (int i=1; i<=m; ++i)
{
scanf("%d%d%d",&x[i],&y[i],&z[i]);
ind[i]=i;
}
sort(ind+1,ind+1+m,cmp);
apm();
while (t--)
{
scanf("%d%d",&x1,&y1);
df(x1,0);
viz.reset();
ok=false;
printf("%d\n",rez);
}
}
int main()
{
citire();
return 0;
}