Sol

发现\(NOIP2017\)还没\(AK\)???

赶紧改

考场上明明打出了\(DP\),没时间了,没判环,重点是没初始化数组,爆\(0\)

\(TAT\)

先最短路,然后\(f[i][j]\)表示到\(i\)时,比最短路大\(j\)的方案

大力记搜就好了

判环就记录一下当前转移的是否在栈中就没了

明明这么简单,可我就是与\(AC\)擦肩而过

  1. # include <bits/stdc++.h>
  2. # define RG register
  3. # define IL inline
  4. # define Fill(a, b) memset(a, b, sizeof(a))
  5. using namespace std;
  6. const int _(1e5 + 5);
  7. typedef long long ll;
  8. typedef int Arr[_];
  9. IL int Input(){
  10. RG int x = 0, z = 1; RG char c = getchar();
  11. for(; c < '0' || c > '9'; c = getchar()) z = c == '-' ? -1 : 1;
  12. for(; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
  13. return x * z;
  14. }
  15. Arr first, dis, vis, f[55], in[55];
  16. int n, m, k, p, cnt, ans, flg;
  17. struct Edge{
  18. int to, next, w;
  19. } edge[_ << 1];
  20. queue <int> Q;
  21. IL void Add(RG int u, RG int v, RG int w){
  22. edge[cnt] = (Edge){v, first[u], w}; first[u] = cnt++;
  23. }
  24. IL void SPFA(){
  25. dis[1] = 0, Q.push(1), vis[1] = 1;
  26. while(!Q.empty()){
  27. RG int u = Q.front(); Q.pop();
  28. for(RG int e = first[u]; e != -1; e = edge[e].next){
  29. RG int v = edge[e].to, w = edge[e].w;
  30. if(dis[u] + w < dis[v]){
  31. dis[v] = dis[u] + w;
  32. if(!vis[v]) Q.push(v), vis[v] = 1;
  33. }
  34. }
  35. vis[u] = 0;
  36. }
  37. }
  38. IL int Dfs(RG int u, RG int d){
  39. if(flg) return 0;
  40. if(in[d][u]) return !(flg = 1);
  41. if(~f[d][u]) return f[d][u];
  42. in[d][u] = 1, f[d][u] = (u == n && d <= k);
  43. for(RG int e = first[u]; e != -1; e = edge[e].next){
  44. RG int v = edge[e].to, fd = dis[u] + edge[e].w + d - dis[v];
  45. if(fd < 0 || fd > k) continue;
  46. (f[d][u] += Dfs(v, fd)) %= p;
  47. }
  48. return f[d][u] + (in[d][u] = 0);
  49. }
  50. int main(RG int argc, RG char* argv[]){
  51. RG int T = Input();
  52. while(T--){
  53. n = Input(), m = Input(), k = Input(), p = Input();
  54. Fill(first, -1), Fill(dis, 127), Fill(f, -1), Fill(in, 0);
  55. flg = ans = cnt = 0;
  56. for(RG int i = 1; i <= m; i++){
  57. RG int u = Input(), v = Input(), w = Input();
  58. Add(u, v, w);
  59. }
  60. SPFA(), ans = Dfs(1, 0);
  61. printf("%d\n", flg ? -1 : ans);
  62. }
  63. return 0;
  64. }

NOIP2017:逛公园的更多相关文章

  1. [NOIP2017] 逛公园

    [NOIP2017] 逛公园 题目大意: 给定一张图,询问长度 不超过1到n的最短路长度加k 的1到n的路径 有多少条. 数据范围: 点数\(n \le 10^5\) ,边数\(m \le 2*10^ ...

  2. 【比赛】NOIP2017 逛公园

    考试的时候灵光一闪,瞬间推出DP方程,但是不知道怎么判-1,然后?然后就炸了. 后来发现,我只要把拓扑和DP分开,中间加一个判断,就AC了,可惜. 看这道题,我们首先来想有哪些情况是-1:只要有零环在 ...

  3. 【题解】NOIP2017逛公园(DP)

    [题解]NOIP2017逛公园(DP) 第一次交挂了27分...我是不是必将惨败了... 考虑这样一种做法,设\(d_i\)表示从该节点到n​节点的最短路径,\(dp(i,k)\)表示从\(i\)节点 ...

  4. NOIP2017逛公园(dp+最短路)

    策策同学特别喜欢逛公园.公园可以看成一张N个点M条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,N号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要花的时间. 策策每天都会 ...

  5. NOIP2017 逛公园 题解报告 【最短路 + 拓扑序 + dp】

    题目描述 策策同学特别喜欢逛公园.公园可以看成一张NNN个点MMM条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,NNN号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要花 ...

  6. [NOIP2017]逛公园 题解

    我连D1T3都不会我联赛完蛋了 题目描述 策策同学特别喜欢逛公园.公园可以看成一张 N 个点 M 条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口, N 号点是公园的出口,每条边有一个非负 ...

  7. [NOIP2017] 逛公园 解题报告(DP)

    我很不想说 在我的AC代码上我打了表,但实在没有办法了.莫名的8,9个点RE.然而即便是打表...也花了我很久. 这大概是NOIP2017最难的题了,为了让不懂的人更容易理解,这篇题解会比较详细 我的 ...

  8. [NOIP2017] 逛公园 【最短路】【强连通分量】

    题目分析: 首先考虑无数条的情况.出现这种情况一定是一条合法路径经过了$ 0 $环中的点.那么预先判出$ 0 $环中的点和其与$ 1 $和$ n $的距离.加起来若离最短路径不超过$ k $则输出$ ...

  9. luogu3953 [NOIp2017]逛公园 (tarjan+dijkstra+记忆化搜索)

    先跑一边dijkstra算出从1到i的最短距离dis[i] 然后建反向边 从n开始记忆化搜索,(p,k)表示1到p的距离=dis[p]+k的方案数 答案就是$\sum\limits_{i=0}^{k} ...

  10. noip2017逛公园

    题解: 之前知道正解并没有写过.. #include <bits/stdc++.h> using namespace std; #define rint register int #def ...

随机推荐

  1. dbproxy-user/pwd

    dbproxy 的账号是统一的, 即连接dbproxy,连接主mysql ,连接从mysql 的账号必须一样, 为了隔离 即使用dbproxy的人感知不到mysql, 需要分离 配置文件 #dbpro ...

  2. HTML中title前面小图标和网站收藏现实的图标

    网站上的logo实际上是一个“favicon.ico”图片.实现步骤:第一步:制作favicon.ico,大小为16*16毫米:第二步:将“favicon.ico”放到项目的根路径下. 第三步:在所有 ...

  3. 网络基础 01_OSI网际互联

    1 通信概述 网络是用物理链路将各个孤立的工作站或主机相连在一起,组成数据链路,从而达到资源共享和通信的目的. 通信是人与人之间通过某种媒体进行的信息交流与传递. 网络通信是通过网络将各个孤立的设备进 ...

  4. 2019 CCPC-Wannafly Winter Camp Day4(Div2, onsite)

    slove 6/11 A.夺宝奇兵 Code:zz Thinking:zz 贪心即可.这条路线里,点n1和点n2肯定是相连的,接下来,点(n-1)1和点(n-1)2分别是和n1和点n2相连的,一共有两 ...

  5. python爬虫之urllib库(一)

    python爬虫之urllib库(一) urllib库 urllib库是python提供的一种用于操作URL的模块,python2中是urllib和urllib2两个库文件,python3中整合在了u ...

  6. centos 7 设置开机启动服务

    2018-12-25 Centos7下添加开机自启动脚本和服务的方法 以docker 服务为例 1.centos7自带命令设置 systemctl enable docker.service 2.设置 ...

  7. js小仓库

    1.千分位分隔符 const toDecimalMark = num => num.toLocaleString("en-US"); console.log(toDecima ...

  8. SpringBoot 整合 ActiveMq

    消息队列,用来处理开发中的高并发问题,通过线程池.多线程高效的处理并发任务. 首先,需要下载一个ActiveMQ的管理端:我本地的版本是 activemq5.15.8,打开activemq5.15.8 ...

  9. c/c++ int long float double 表示范围

    引自https://blog.csdn.net/xuexiacm/article/details/8122267

  10. ACM java写法入门

    打2017icpc沈阳站的时候遇到了大数的运算,发现java与c++比起来真的很赖皮,竟然还有大数运算的函数,为了以后打比赛更快的写出大数的算法并且保证不错,特意在此写一篇博客, 记录java的大数运 ...