显然最短路长度随着v的变化是单调的,于是可以二分答案,据说spfa在网格图上表现较差. #include<cstdio> #include<cstring> #include<queue> using namespace std; typedef double db; typedef long long ll; #define N 101 #define INF 2147483647.0 #define EPS 0.0000001 struct Point{db d;i…
二分答案,spfa check就行了. gb题卡精度. #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; ]={-,,,}; ]={,,,-}; double L;int n,m; ][]; int stx,sty,edx,edy…
BZOJ 2709: [Violet 1]迷宫花园 Sample Input 5 ######### # # # # # # # #S# # ##### # # ## # # # ### ### ##E # ######### ######### # ## ## ### #S# # # # E ## # # ##### # ## ### # ##### # # # # ######### ######### # # # # # # # # E# # # # # # # # ## ### # #…
传送门 解题思路 首先看题目问题,求经过的所有城市中最多的一次收取的费用的最小值是多少.一看“最大值最小”就想到了二分答案. 在读一遍题目,就是二分收取的费用,然后对于每一个二分的费用,跑一边最短路,要求不经过>收取费用的城市,最后看一看能否在规定血量内走到终点. 想起来还是比较容易的,写起来要注意一下细节,注意二分的形式和用堆优化的dijkstra的写法. 悲惨的做题经历 今天凌晨,终于灵光一现,发现了问题——变量定义在主函数外面时不能直接用另一个变量来赋初值!!怪不得总是wrong answ…
题意:给定迷宫,可以更改高度比,问如何使最短路等于输入数据. 思路:由于是单调的,可以用二分答案,然后BFS验证.这里用优先队列,每次压入也要进行检查(dis大小)防止数据过多,A*也可以.好久不写图论,WA成狗 #include <iostream> #include <string> #include <cstring> #include <cstdio> #include <algorithm> #include <memory>…
先不考虑只有一个显得有些特殊的天兵. 可以发现超能力的作用实质上是使兵更换职业.每一个兵到达某个位置最少需要更换职业的次数是彼此独立的,因为如果需要某两人互换职业可以使他们各自以当前职业到达需要到的地方,不会造成其中一个次数增加. 于是预处理出每个兵到达每个位置的最少代价.之后二分答案,把每个兵向可以到达的目标位置连边.跑最大流就可以知道是否可行. 最后考虑天兵.天兵可以任意游走,并且与天兵换职业的兵可以直接到达目的地.那么在最大流的结果上加上二分出的答案即可,因为每次使用超能力都可以送走一个兵…
题目1 : 优化延迟 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho编写了一个处理数据包的程序.程序的输入是一个包含N个数据包的序列.每个数据包根据其重要程度不同,具有不同的"延迟惩罚值".序列中的第i个数据包的"延迟惩罚值"是Pi.如果N个数据包按照<Pi1, Pi2, ... PiN>的顺序被处理,那么总延迟惩罚 SP=1*Pi1+2*Pi2+3*Pi3+...+N*PiN(其中i1, i2, ... iN是1,…
题目传送门(内部题88) 输入格式 第一行两个数$n,m$.第二行四个数$sx,sy,tx,ty$.分别表示起点所在行数.列数,终点所在行数.列数.接下来$n$行,每行$m$个数,描述迷宫.最后一行一个正实数$s$. 输出格式 输出答案$k$,四舍五入保留$3$位小数.(评测时开启逐行比较模式) 样例 样例输入: 4 41 1 4 40 0 1 11 0 0 00 0 1 00 0 0 05 样例输出: 0.667 数据范围与提示 对于$30\%$的数据:$n,m\leqslant 10$对于另…
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 题面 题目链接 P1948 [USACO08JAN]电话线Telephone Lines 题目描述 Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone company is uncooperative, so he needs to pay for some of…
这道题目有两种解法: 1.将每个点视为一个二元组(x,p),表示从起点到x有p条路径免费,相当于构建了一张分层图,N*k个节点,P*k条边.在这张图上用优先队列优化的SPFA算法求解,注意这里的d数组存的不是最短路径,而是路径中边权最大的值,最终答案就是min(d[n][j]),0<=j<=k . 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1005,M=20005; 4 int head[N],to…