noip2017d1t3】的更多相关文章

其实是参考洛谷上某篇题解的思路: 先求出两个dis数组表示从1走和从n走的最短路: 转移方程:dp[v][dis1[u]-dis1[v]+w+j]+=dp[u][j]; 转移顺序要注意一下呢,肯定是先枚举第二维: dis1[u]-dis1[v]+w+j>=j; 因为有等号,即有同层之间的转移,第一维也不能随便枚举: 如果没有0边,我们可以考虑按dis1从小到大枚举,和dijkstra很像,可以保证更新顺序是对的: 有了零边就要考虑连续好几个零边之间的转移,这个可以把0边挑出来拓扑排序: 关于-1…
因为A掉了d1t1,十分开心,把d1t3的代码调出来了. 一般情况下,noip每一天总有一道dp题,然而d1前两道题都不是,再看看第三题的数据范围,就能大概猜出是dp了. 这道题和最短路计数看上去很像.回想一下最短路计数的解法,大概是按照bfs序进行dp,dp[u]表示到节点u的条数.对于这道题而言,求的不是最短路条数而是长度不超过最短路+k的路径条数,那么就可以用dp[u][j]表示到节点u路径长度等于j的路径数. 至于如何转移,用dis[x]表示x到1的最短路长度,则当dis[u]+w[k]…
QWQ前几天才刚刚把这个D1T3写完 看着题解理解了很久,果然我还是太菜了QAQ 题目大意就是 给你一个n个点,m条边的图,保证1能到达n,求从1到n的 (设1到n的最短路长度是d)路径长度在[d,d+k]之间的路径有多少条,答案要对p取膜 下面附上数据范围的大表哥! 首先对于30%的数据,我们可以直接跑最短路计数来实现QWQ 这里最短路计数就不作详细解释了! 一定注意的是 当更新dis[to[i]]时,要记得把ans[to[i]]赋值成ans[x] 千万不要手残写成1!!! 上代码 #incl…
题目 作为\(NOIp2017D1T3\) 这个题还是很良心的,至少相对于\(NOIp2018\)来说,希望\(NOIp2019\)不会这么坑吧. 这个题可以作为记忆化搜索的进阶题了,做这个题的方法也是多种多样. \(30pts\) 30分可以直接套用最短路计数的模板直接套上就可以了. \(100pts\) 100其实有很多做法,我认为最好写的做法就是记忆化搜索了. 首先我们先要判断是否有无数条路径,那根据题意的话,只要原图中存在零环则就为无数条路径. 然后考虑记忆化搜索的步骤,我们用\(dp[…