50pts求助
  • 板块P1396 营救
  • 楼主monodev
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/5 20:40
  • 上次更新2023/11/2 15:24:34
查看原帖
50pts求助
533102
monodev楼主2023/10/5 20:40

从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;
}
2023/10/5 20:40
加载中...