从s开始bfs找到t,沿途记录拥挤度的最大值,找到t就更新ans
#include <iostream>
#include <vector>
#include <queue>
#define AC return 0
using namespace std;
const int inf = 2147483647;
struct edge {
int to, w;
};
vector <edge> edges[10001];
struct snode {
int node, maxnow;
};
int main(){
int n, m, s, t;
cin >> n >> m >> s >> t;
for(int i = 0; i < m; ++ i){
int u, v, w;
cin >> u >> v >> w;
edges[u].push_back(edge{v, w});
edges[v].push_back(edge{u, w});
}
int ans = inf;
queue <snode> bfs;
bfs.push(snode{s, 0});
while(!bfs.empty()){
snode cur = bfs.front();
if(cur.node == t)
ans = min(ans, cur.maxnow);
for(int i = 0; i < edges[cur.node].size(); ++ i){
snode nxt = snode{edges[cur.node][i].to, max(cur.maxnow, edges[cur.node][i].w)};
bfs.push(nxt);
for(int j = 0; j < edges[nxt.node].size(); ++ j)
if(edges[nxt.node][j].to == cur.node){
edges[nxt.node].erase(edges[nxt.node].begin() + j);
break;
}
}
bfs.pop();
}
cout << ans << endl;
AC;
}