https://www.luogu.org/problemnew/show/P1396
题意:n个点,m条路径,求从A点到B点的道路的最大权值的最小值。【即路径上的最大的值的最小值】
const int maxn=1e5+10;
queue<int>q;
int head[maxn],next[maxn],to[maxn],val[maxn];
int dis[maxn],vis[maxn];
int n,m,a,b,tot;
void add(int u,int v,int w)//前向星
{
next[++tot]=head[u];
head[u]=tot;
to[tot]=v;
val[tot]=w;
}
int main()
{
cin>>n>>m>>a>>b;
for(int i=1;i<=m;i++)
{
int u,v,w;
scanf("%d %d %d",&u,&v,&w);
add(u,v,w);
add(v,u,w);
}
for(int i=1;i<=n;i++)
{
dis[i]=INF;
}
dis[a]=0;
q.push(a);
vis[a]=1;
while(!q.empty())
{
int now=q.front();
q.pop();
int tmp;
vis[now]=0;
for(int i=head[now];i,tmp=to[i];i=next[i])
{
if(dis[tmp]>max(dis[now],val[i]))//这里与原spfa不同
{
dis[tmp]=max(dis[now],val[i]);
if(!vis[tmp])
{
q.push(tmp);
vis[tmp]=1;
}
}
}
}
if(dis[b]==INF)
{
dis[b]=-1;
}
printf("%d\n",dis[b]);
}