[luogu P3953] [noip2017 d1t3] 逛公园】的更多相关文章

[luogu P3953] [noip2017 d1t3] 逛公园 题目描述 策策同学特别喜欢逛公园.公园可以看成一张$N$个点$M$条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,$N$号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要花的时间. 策策每天都会去逛公园,他总是从1号点进去,从$N$号点出来. 策策喜欢新鲜的事物,它不希望有两天逛公园的路线完全一样,同时策策还是一个 特别热爱学习的好孩子,它不希望每天在逛公园这件事上花费太多的时间.如果1号点 到$N$…
DP+最短路 两遍最短路判零环 DP转移f[i][j] 到点i的距离比最短路多j时的方案数 #include<bits/stdc++.h> using namespace std; ; struct node {     int to,nex,w; }e[N],z[N]; ],head2[]; int add(int x,int y,int w) {     e[++cnt1].to=y;e[cnt1].w=w;e[cnt1].nex=head[x];head[x]=cnt1;     z[+…
发现 \(K\) 很小,不妨设置一个 \(O(NK)\) 的 \(DP\). 发现可行的最短路必须满足是 \(d <= dis <= d + K\). 由逆向思维,则是从某点出发,可以消耗 \(K\) 个单位的冗余长度,最终到达 \(n\). 如何快速的计算出有走这条边冗余长度呢 首先建反向图跑 \(Dijkstra\),求出 \(dis[i]\) 表示从 \(i\) 到 \(n\) 的最短路距离. 假设有一条边 \((u, v)\),边长为 \(w\) 那么我现在从 \(u\) 到 \(n\…
题目描述 策策同学特别喜欢逛公园.公园可以看成一张N个点M条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,N号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要花的时间. 策策每天都会去逛公园,他总是从1号点进去,从N号点出来. 策策喜欢新鲜的事物,它不希望有两天逛公园的路线完全一样,同时策策还是一个 特别热爱学习的好孩子,它不希望每天在逛公园这件事上花费太多的时间.如果1号点 到N号点的最短路长为d,那么策策只会喜欢长度不超过d+K的路线. 策策同学想知道总共有多少条…
题意: 策策同学特别喜欢逛公园. 公园可以看成一张 N 个点 M 条边构成的有向图,且没有自环和重边.其中 1 号点是公园的入口, N 号点是公园的出口,每条边有一个非负权值,代表策策经过这条边所要花的时间. 策策每天都会去逛公园,他总是从 1 号点进去,从 N 号点出来. 策策喜欢新鲜的事物,他不希望有两天逛公园的路线完全一样,同时策策还是一个特别热爱学习的好孩子,他不希望每天在逛公园这件事上花费太多的时间.如果 1 号点到 N 号点的最短路长为 d,那么策策只会喜欢长度不超过 d+K 的路线…
题目 首先我们跑出从\(1\)出发的最短路\(d1\)和反图上从\(n\)出发的最短路\(dn\). 然后我们处理出长度不超过\(d1_n+k\)的最短路边集,给它拓扑排序. 如果存在环,那么这个环一定是一个\(0\)环,此时是无解的. 否则我们把它的拓扑序跑出来. 对于一条边\((u,v,w)\),如果我们走这条边,会让路径长度比最短路大\(d1_u+w-d1_v\). 那么我们设\(f_{i,j}\)表示走到第\(i\)个点,走过的路径长度是\(d1_i+j\). 从小到大枚举\(j\),按…
题目:https://www.luogu.org/problemnew/show/P3953 主要是看题解...还是觉得好难想啊... dfs DP,剩余容量的损耗是边权减去两点最短路差值...表示对于最短路来说多走了这么多... 还要注意该点能否到达 n 号点,不能就不走了(剪枝): %p 那个地方会爆 int 吗?反正 %=p RE了一个点...(然而改成 ll 还是RE) 代码如下: #include<iostream> #include<cstdio> #include&l…
Sol 发现\(NOIP2017\)还没\(AK\)??? 赶紧改 考场上明明打出了\(DP\),没时间了,没判环,重点是没初始化数组,爆\(0\) \(TAT\) 先最短路,然后\(f[i][j]\)表示到\(i\)时,比最短路大\(j\)的方案 大力记搜就好了 判环就记录一下当前转移的是否在栈中就没了 明明这么简单,可我就是与\(AC\)擦肩而过 # include <bits/stdc++.h> # define RG register # define IL inline # defi…
传送门 Luogu 解题思路 考虑 \(\text{DP}\). 设 \(f[u][k]\) 表示从 \(u\) 到 \(n\) 走过不超过 \(Mindis(u, n) + k\) 距离的方案数. 转移方程为:\(f[u][k] = \sum{f[v][k + Mindis(u,n) - Mindis(v,n) - dis(u,v)]}\) \(Mindis\) 可以预处理. 无解的情况直接在记搜的时候把 \(-1\) 传上去. 最后输出 \(f[1][k]\) 即可. 细节注意事项 要记得有…
诶,去年场上不会处理$0$的环,只拿了$60$有点可惜. 我们先不管边边权为$0$的边. 我们先跑一次最短路,令$dis[u]$表示从$1$至$u$的最短路的长度. 那么根据题目的要求,从起点走到$u$号点的路径长度只可能在区间$[dis[u],dis[u]+k]$中. 令$f[i][j]$表示当前从起点走到$i$,行走的路程为$dis[i]+j$的方案数. 不妨发现这个东西可以通过类似分层图最短路的方式进行更新,然后就直接更新就行了. 然而这一题中有部分点存在边权为$0$的边,一旦走入一个$0…