题目链接:https://www.luogu.com.cn/problem/P1462

题目大意:

有 \(n\) 个点 \(m\) 条边,每个点有一个点权,每个边有一个边权。求所有长度不超过 \(b\) 的路径中的点权最大值的最小值。

解题思路:

二分答案 \(D\)(即点权最小值),每次求最短路查看有没有所有点权都 \(\le D\) 的最短路径长度 \(\le b\)。

实现代码如下:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 10010;
int n, m;
long long b, f[maxn];
struct Node {
int v, w;
Node () {};
Node (int _v, int _w) { v = _v; w = _w; }
};
vector<Node> g[maxn];
queue<int> que;
long long dist[maxn];
bool inq[maxn];
bool check(long long D) { // SPFA
for (int i = 1; i <= n; i ++) {
dist[i] = -1;
inq[i] = false;
}
while (!que.empty()) que.pop();
dist[1] = 0;
que.push(1);
while (!que.empty()) {
int u = que.front();
que.pop();
inq[u] = false;
int sz = g[u].size();
for (int i = 0; i < sz; i ++) {
int v = g[u][i].v, w = g[u][i].w;
if (f[v] > D) continue; // 城市收取费用不能超过D
if (dist[u] + w > b) continue; // 距离不能超过b
if (dist[v] == -1 || dist[v] > dist[u] + w) {
dist[v] = dist[u] + w;
if (!inq[v]) {
inq[v] = true;
que.push(v);
}
}
}
}
return dist[n] != -1 && dist[n] <= b;
}
void solve() {
long long L = 0, R = 0, res = -1;
for (int i = 1; i <= n; i ++) R = max(R, f[i]);
while (L <= R) {
long long mid = (L + R) / 2;
if (check(mid)) {
res = mid;
R = mid - 1;
}
else L = mid + 1;
}
if (res == -1) puts("AFK");
else cout << res << endl;
}
int main() {
cin >> n >> m >> b;
for (int i = 1; i <= n; i ++) cin >> f[i];
while (m --) {
int u, v;
long long w;
cin >> u >> v >> w;
g[u].push_back(Node(v, w));
g[v].push_back(Node(u, w));
}
solve();
return 0;
}

最新文章

  1. Python anaconda links to GOMP_4.0 and throws error
  2. 通过rem编写自适应移动端要点
  3. webpy使用笔记(一)
  4. CXF 自定义拦截器
  5. AJAX 数据库实例
  6. Objective-C:Foundation框架-结构体
  7. 【现代程序设计】【homework-05】
  8. 如何在Azure上创建和部署云服务
  9. 测测你适合从事Web前端开发吗
  10. svn检出maven工程到eclipse里面,部署到tomcat的步骤
  11. MVC创建XML,并实现增删改
  12. FMDB事务的使用
  13. web从入门开始(4)--------链接
  14. 仿qq最新侧滑菜单
  15. 给datagridview的下拉框添加valueChange事件
  16. nodejs 中的一些方法
  17. web安全基础
  18. MYSQL ROW_FORMAT=Compact
  19. LeetCode168.Excel表列名称
  20. delphi正则表达式学习笔记(二)

热门文章

  1. ReactDOM &amp; DOM Elements
  2. 微信公众号无法使用css3的多行省略
  3. svg和canvas比较以及svg简单介绍
  4. H3C 帧中继基本概念
  5. 详解PhpStudy集成环境升级MySQL数据库版本
  6. [转]1.2 java web的发展历史
  7. spring boot + thymeleaf 乱码问题
  8. npm install 报错(npm ERR! errno -4048,Error: EPERM: operation not permitted)
  9. Python--day32--ftp文件传输报错的原因
  10. P1101 走迷宫一