洛谷P1396 营救 题解
1.洛谷P1028 [NOIP 2001 普及组] 数的计算 题解2.洛谷P1464 Function 题解3.洛谷P2440 木材加工 题解4.洛谷P2678 [NOIP 2015 提高组] 跳石头 题解5.洛谷P1314 [NOIP 2011 提高组] 聪明的质监员 题解6.洛谷P1083 [NOIP 2012 提高组] 借教室 题解7.洛谷P1902 刺杀大使 题解8.洛谷P1873 [COCI 2011/2012 #5] EKO / 砍树 题解9.洛谷P2280 [HNOI2003] 激光炸弹 题解10.洛谷P8218 【深进1.例1】求区间和 题解11.洛谷 P1719 最大加权矩形 题解12.洛谷 P2367 语文成绩 题解13.洛谷P1387 最大正方形 题解14.洛谷P1014[NOIP 1999 普及组] Cantor 表 题解15.洛谷P1563 [NOIP 2016 提高组] 玩具谜题 题解16.洛谷P4924 [1007] 魔法少女小Scarlet 题解17.洛谷P1518 [USACO2.4] 两只塔姆沃斯牛 The Tamworth Two 题解18.洛谷P1786 帮贡排序 题解19.洛谷P1990 覆盖墙壁 题解20.洛谷P1010 [NOIP 1998 普及组] 幂次方 题解21.洛谷P1259 黑白棋子的移动 题解22.洛谷P1281 书的复制 题解
23.洛谷P1396 营救 题解
24.洛谷PP1570 KC 喝咖啡25.洛谷P1661 扩散 题解26.洛谷P1843 奶牛晒衣服 题解本题做法
- 二分答案+BFS。
思路
对于输入的数据,使用4个数组\(head,tail,value,next\)记录每个点的第一条边、每条边的结尾、每条边的拥挤值以及每条边的下一条边。
随后使用二分答案法二分所求的答案,使用\(check\)函数检测是否可行。
\(check\)函数:从\(s\)点开始BFS,若当前边的\(value\)小于等于\(x\),则将当前边的\(tail\)加入队列,继续BFS。最后,判断是否走过\(t\)点,若走过,则返回true;否则返回false。
代码
#include <bits/stdc++.h> #define endl '\n' #define ll long long using namespace std; const int INF = 0x3f3f3f3f; const double EPS = 1e-8; const int N = 2e5 + 5; int n, m, s, t, u, v, w, mxw = -1; int value[N], /*表示第i条边的拥挤度*/ head[N], /*表示第i个点的第一条边*/ tail[N], /*表示第i条边的*/ nxt[N]; /*表示第i条边的下一条边*/ bool vis[N]; bool check(int x) { memset(vis, 0, sizeof(vis)); queue<int> q; vis[s] = 1; q.push(s); while (!q.empty()) { int stt = head[q.front()]; q.pop(); while (stt) { if (value[stt] <= x && !vis[tail[stt]]) { q.push(tail[stt]); vis[tail[stt]] = 1; } stt = nxt[stt]; } } return vis[t]; } int main() { cin >> n >> m >> s >> t; for (int i = 1; i <= m; i++) { cin >> u >> v >> w; // 从u到v的边 value[2 * i] = w; tail[2 * i] = v; nxt[2 * i] = head[u]; head[u] = 2 * i; // 从v到u的边 value[2 * i + 1] = w; tail[2 * i + 1] = u; nxt[2 * i + 1] = head[v]; head[v] = 2 * i + 1; mxw = max(mxw, w); } if (s == t) { cout << 0 << endl; return 0; } int l = 0, r = mxw + 1; while (l + 1 < r) { int mid = l + (r - l) / 2; if (check(mid)) r = mid; else l = mid; } cout << r << endl; return 0; }
本文作者:2789617221guo
本文链接:https://www.cnblogs.com/2789617221guo/p/18745507
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步