目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例: 输出样例: 说明 思路 AC代码 总结 题面 题目链接 P1951 收费站_NOI导刊2009提高(2) 其实还有一道双倍经验 P1462 通往奥格瑞玛的道路 题目描述 在某个遥远的国家里,有n个城市.编号为1,2,3,-,n. 这个国家的政府修建了m条双向的公路.每条公路连接着两个城市.沿着某条公路,开车从一个城市到另一个城市,需要花费一定的汽油. 开车每经过一个城市,都会被收取一定的费用(包括起点和终…
题目大意:有一张$n$个点$m$条边的图,每个点有一个权值$w_i$,有边权,询问从$S$到$T$的路径中,边权和小于$s$,且$\max\limits_{路径经过k}\{w_i\}$最小,输出这个最小值,若到达不了,输出$-1$ 题解:看到最大值最小,想到二分答案,二分这个最大值,每次对这个二分的答案跑一遍最短路,看是否可以到达就行了 卡点:1.没有判断起点的权值大于二分答案的情况 C++ Code: #include <cstdio> #include <algorithm>…
题目描述 在某个遥远的国家里,有n个城市.编号为1,2,3,…,n. 这个国家的政府修建了m条双向的公路.每条公路连接着两个城市.沿着某条公路,开车从一个城市到另一个城市,需要花费一定的汽油. 开车每经过一个城市,都会被收取一定的费用(包括起点和终点城市).所有的收费站都在城市中,在城市间的公路上没有任何的收费站. 小红现在要开车从城市u到城市v(1<=u,v<=n).她的车最多可以装下s升的汽油.在出发的时候,车的油箱是满的,并且她在路上不想加油. 在路上,每经过一个城市,她都要交一定的费用…
https://www.luogu.org/problem/show?pid=1951 题目描述 在某个遥远的国家里,有n个城市.编号为1,2,3,…,n. 这个国家的政府修建了m条双向的公路.每条公路连接着两个城市.沿着某条公路,开车从一个城市到另一个城市,需要花费一定的汽油. 开车每经过一个城市,都会被收取一定的费用(包括起点和终点城市).所有的收费站都在城市中,在城市间的公路上没有任何的收费站. 小红现在要开车从城市u到城市v(1<=u,v<=n).她的车最多可以装下s升的汽油.在出发的…
题目描述 在某个遥远的国家里,有n个城市.编号为1,2,3,-,n. 这个国家的政府修建了m条双向的公路.每条公路连接着两个城市.沿着某条公路,开车从一个城市到另一个城市,需要花费一定的汽油. 开车每经过一个城市,都会被收取一定的费用(包括起点和终点城市).所有的收费站都在城市中,在城市间的公路上没有任何的收费站. 小红现在要开车从城市u到城市v(1<=u,v<=n).她的车最多可以装下s升的汽油.在出发的时候,车的油箱是满的,并且她在路上不想加油. 在路上,每经过一个城市,她都要交一定的费用…
思路:二分+最短路 提交:1次 题解: 二分最后的答案. $ck()$: 对于每次的答案$md$跑$s,t$的最短路,但是不让$c[u]>md$的点去松弛别的边,即保证最短路不经过这个点.最后$return\space dis(s,t)<=$油箱容量 代码: #include<cstdio> #include<iostream> #include<queue> #include<cstring> #define R register int us…
二分答案+堆优Dijkstra 这个题有些巧妙. 首先,因为要在油量耗完之前跑到终点,所以我们可以用最短路.只要从\(s\)出发到\(t\),它的最短距离大于油量,我们就可以断定它一定走不通,直接输出\(-1\). 然后因为要求最大值最小,所以考虑二分答案.用一个数组来储存点的值从大到小的排序,然后边界范围设置 : \(L\)为\(s\)和\(t\)的中较大的拿一个的排名,\(R\)为n.为什么\(L\)要这样设置呢?因为\(s\)和\(t\)是必经的点,所以它们一定要选,所以最小值只能设为它们…
查看原题请戳这里 核心思路 题目让求最大费用的最小值,很显然这道题可以二分,于是我们可以二分花费的最大值. check函数 那么,我们该怎么写check函数呢? 我们可以删去费用大于mid的点以及与其相连的边,然后在剩余的点和边组成的图上跑一遍最短路求出从u到v需要消耗的最小的汽油,如果消耗汽油最小值不大于s,那么返回true,否则返回false. 注意事项 在二分时一定要判断到起点的花费是否大于mid r的初始值值应为$f_{max}+1$,因为如果$r_{start}=f_{max}$,那么…
1462原题链接 1951原题链接 显然答案有单调性,所以可以二分答案,用\(SPFA\)或\(dijkstra\)跑最短路来判断是否可行即可. 注意起点也要收费,\(1462\)数据较水,我一开始没判也过了,但重题\(1951\)把我卡掉了.. #include<cstdio> #include<cstring> #include<queue> using namespace std; const int N = 1e4 + 10; const int M = 1e5…
P1950 长方形_NOI导刊2009提高(2) 题目描述 小明今天突发奇想,想从一张用过的纸中剪出一个长方形. 为了简化问题,小明做出如下规定: (1)这张纸的长宽分别为n,m.小明讲这张纸看成是由n*m个格子组成,在剪的时候,只能沿着格子的边缘剪. (2)这张纸有些地方小明以前在上面画过,剪出来的长方形不能含有以前画过的地方. (3)剪出来的长方形的大小没有限制. 小明看着这张纸,想了好多种剪的方法,可是到底有几种呢?小明数不过来,你能帮帮他吗? 输入格式 第一行两个正整数n,m,表示这张纸…