洛谷P3953 [NOIP2017]逛公园】的更多相关文章

K<=50,感觉可以DP 先建反图求出从n到各个点的最短路,然后在正图上DP 设f[当前点][比最短路多走的距离]=方案数 转移显然是 $f[v][res]=\sum f[u][res+tmp]$  tmp是从v到u比最短路多走的路程 注意如果图中有0环,则有无穷多种方案. 判0环可以DFS判,也可以把最短路边和0权边建在一个新图上,用拓扑排序判(显然前者更简单) /*by SilverN*/ #include<iostream> #include<algorithm> #i…
题目来源:洛谷P3953 思路 先用SPFA求一遍最短路 在求最短路的同时可以把所有点到终点的最短路求出来 dis数组 注意要反向SPFA  因为从起点开始可能会走到一些奇怪的路上导致时间负责度增加 我们定一个f[u][k]数组为从当前节点u还剩时间k到达终点的方案 原来从u走到终点的最短路径消耗时间为dis[u] 而我们现在考虑走(u,v,w)这条边(不是最短路) 那么比走最短路需要多dis[v]+w-dis[u]的时间 所以f[u][k]=∑f[v][k-(dis[v]+w-dis[u])]…
题目:https://www.luogu.org/problemnew/show/P3953 因为K只有50,所以想到用dp[ cr ][ j ]表示在点cr.比最短路多走了 j 的方案数.(看了TJ才知道) 因为不是DAG,所以没有拓扑序,就用记忆化搜索就好了. 判0环可以用bool数组,而且是栈的样子,表示从自己出发又一模一样地走回来就说明有0环. 0环还要在一条合法路径上才行.判断是dis[cr]+k+dit[cr]<=dis[n]+K.(dit是从n到各点的最短路)还可以用它剪枝. #i…
P4513 小白逛公园 题目背景 小新经常陪小白去公园玩,也就是所谓的遛狗啦… 题目描述 在小新家附近有一条“公园路”,路的一边从南到北依次排着nn个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩了. 一开始,小白就根据公园的风景给每个公园打了分-.-.小新为了省事,每次遛狗的时候都会事先规定一个范围,小白只可以选择第aa个和第bb个公园之间(包括aa.bb两个公园)选择连续的一些公园玩.小白当然希望选出的公园的分数总和尽量高咯.同时,由于一些公园的景观会有所改变,所以,小白的打分也可能会有…
区间最大子段和模板题.. 维护四个数组:prefix, suffix, sum, tree 假设当前访问节点为cur prefix[cur]=max(prefix[lson],sum[lson]+preifx[rson]) suffix[cur]=max(suffix[rson],sum[rson]+suffix[lson]) sum[cur]=sum[lson]+sum[rson] tree[cur]=max(tree[lson], tree[rson], suffix[lson]+suffi…
传送门 线段树常规操作了解一下. 单点修改维护区间最大连续和. 对于一个区间,维护区间从左端点开始的连续最大和,从右端点开始的连续最大和,整个区间最大和,区间和. 代码如下: #include<bits/stdc++.h> #define N 500005 #define lc (p<<1) #define rc (p<<1|1) #define mid (T[p].l+T[p].r>>1) using namespace std; struct Node{…
题目 首先我们跑出从\(1\)出发的最短路\(d1\)和反图上从\(n\)出发的最短路\(dn\). 然后我们处理出长度不超过\(d1_n+k\)的最短路边集,给它拓扑排序. 如果存在环,那么这个环一定是一个\(0\)环,此时是无解的. 否则我们把它的拓扑序跑出来. 对于一条边\((u,v,w)\),如果我们走这条边,会让路径长度比最短路大\(d1_u+w-d1_v\). 那么我们设\(f_{i,j}\)表示走到第\(i\)个点,走过的路径长度是\(d1_i+j\). 从小到大枚举\(j\),按…
这道题看起来像是线段树和最大子段和的结合,但这里求最大子段和不用dp,充分利用线段树递归的优势来处理.个人理解:线段树相当于把求整个区间的最大子段和的问题不断划分为很多个小问题,容易解决小问题,然后递归处理较大的问题(分治),所以这就可以用来解决. 在线段树中,除了左端点,右端点,新开4个域--ans,ml,mr,sum,其中sum为该区间的和,ans为该区间上的最大子段和,ml为必须包含左端点(以左端点为头)的最大子段和,mr为必须包含右端点(以右端点为尾)的最大子段和. 更新操作在up()中…
原文链接https://www.cnblogs.com/zhouzhendong/p/9258043.html 题目传送门 - 洛谷P3953 题目传送门 - Vijos P2030 题意 给定一个有向图,有 $n$ 个节点 $m$ 条边,边权值 $\in[0,1000]$ . 小明要从 $1$ 走到 $n$ ,要求路径长度最大为 $d+k$ ,其中 $d$ 为 $1$ 到 $n$ 最短路长度. 问小明有多少种走法,答案对 $p$ 取模.如果有无数种走法,那么输出 $-1$ . $n\leq 1…
[NOIP2017] 逛公园 题目大意: 给定一张图,询问长度 不超过1到n的最短路长度加k 的1到n的路径 有多少条. 数据范围: 点数\(n \le 10^5\) ,边数\(m \le 2*10^5\) 题目解法 两个月后再看也不是太难,自己就能独立思考出来. 首先是判-1的问题,显然能产生-1的只有0环. 所以把0环都找出来, 然后检查一下\(dis[\)\(1\),环\(]\) + \(dis[\)环,\(n]\) 是否小于等于 \(dis[1,n]+K\)即可. 如果不是无限路径的话,…