1、算法竞赛进阶指南,355页
2、是否存在一种合法的升级方法,使得花费不超过 mid。
然后把边长大于 mid 的边看做1, 边长小于mid的边看做是0,
最后求 从1 点到 n的最短路不超过是否超过k即可。
3、对于一个图,边长是0或者1,可以使用双端队列 BFS 来处理。
假如当前出队的点是x(x是当前点), 对于x点所能到达的每一个点y,
如果dist[x][y] <= mid, 并且d[y] > d[x], 说明从x点到y点,能够使得d[y] 更小,
那么就更新d[y](d[y] = d[x]), 并且把y点从队头进入队列。
如果dist[x][y] > mid, 并且d[y] > d[x] + 1, 说明从x点到y点,能够使得d[y] 更小,
那么就更新d[y](d[y] = d[x] + 1), 并且把y点从队尾进入队列。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N =1e3 + 10, M = 2e4 + 10;
int n, p;
ll k;
int tot, head[N], ver[M], Next[M];
ll edge[M];
ll d[N];
void add(int x, int y, int z)
{
ver[++tot