传送门

说实话,这是一道非常简单的DP题,简单到如果放到NOIp第二题可能都有些差强人意,然而我写崩了。

所以简单记录一下。

需要注意的是,这道题的DP应该是从$N$点开始,以1为边界,满足最短路的三角形性质即可转移。

  1. //cf c
  2. //by Cydiater
  3. //2016.9.30
  4. #include <iostream>
  5. #include <cstdio>
  6. #include <cstring>
  7. #include <string>
  8. #include <algorithm>
  9. #include <queue>
  10. #include <map>
  11. #include <ctime>
  12. #include <cmath>
  13. #include <cstdlib>
  14. #include <iomanip>
  15. using namespace std;
  16. #define ll long long
  17. #define up(i,j,n) for(int i=j;i<=n;i++)
  18. #define down(i,j,n) for(int i=j;i>=n;i--)
  19. ;
  20. const int oo=0x3f3f3f3f;
  21. inline ll read(){
  22. ,f=;
  23. ;ch=getchar();}
  24. +ch-';ch=getchar();}
  25. return x*f;
  26. }
  27. ,N,M,T,ans=,lastnode[MAXN],q[MAXN],top=;
  28. bool vis[MAXN];
  29. ll f[][];
  30. struct edge{
  31. int y,next;ll v;
  32. }e[MAXN];
  33. namespace solution{
  34. inline void insert(int x,int y,int v){e[++len].next=LINK[x];LINK[x]=len;e[len].y=y;e[len].v=v;}
  35. void init(){
  36. N=read();M=read();T=read();
  37. up(i,,M){
  38. ll x=read(),y=read(),v=read();
  39. insert(y,x,v);
  40. }
  41. }
  42. void dfs(int node){
  43. if(vis[node])return;
  44. for(int i=LINK[node];i;i=e[i].next)if(!vis[e[i].y])dfs(e[i].y);
  45. )
  46. up(j,,N)]+e[i].v<f[node][j]){
  47. f[node][j]=f[e[i].y][j-]+e[i].v;
  48. if(node==N&&f[node][j]<=T)ans=max(ans,j);
  49. }
  50. vis[node]=;
  51. }
  52. void re_dfs(int node,int num){
  53. ){
  54. ]==f[node][num]-e[i].v){
  55. lastnode[node]=e[i].y;
  56. re_dfs(e[i].y,num-);
  57. return;
  58. }
  59. }
  60. }
  61. void DP(){
  62. memset(f,,sizeof(f));
  63. f[][]=;
  64. dfs(N);
  65. }
  66. void output(){
  67. cout<<ans<<endl;
  68. )return;
  69. re_dfs(N,ans);
  70. ;i=lastnode[i])q[++top]=i;
  71. down(i,top,)printf("%d ",q[i]);
  72. puts("");
  73. }
  74. }
  75. int main(){
  76. //freopen("input.in","r",stdin);
  77. using namespace solution;
  78. init();
  79. DP();
  80. output();
  81. ;
  82. }

CF721C. Journey的更多相关文章

  1. 拓扑排序+DP CF721C Journey

    CF721C Journey 给出一个\(n\)个点\(m\)条边的有向无环图. 问从\(1\)到\(n\),在距离不超过\(k\)的情况下最多经过多少点,并输出一个方案. \(topo\)+\(DP ...

  2. CF721C. Journey[DP DAG]

    C. Journey time limit per test 3 seconds memory limit per test 256 megabytes input standard input ou ...

  3. 【CF721C】Journey(拓扑排序,最短路,DP)

    题意:给一个无环的图,问用不超过T的时间从1到n最多可以经过多少个点.要求输出一条路径. 思路:因为无环,可以用DP做.不过因为时间最短的原因要拓扑排序后再DP,目测由底向上的更新也是可以的. ; . ...

  4. POJ2488A Knight's Journey[DFS]

    A Knight's Journey Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 41936   Accepted: 14 ...

  5. CF #374 (Div. 2) C. Journey dp

    1.CF #374 (Div. 2)    C.  Journey 2.总结:好题,这一道题,WA,MLE,TLE,RE,各种姿势都来了一遍.. 3.题意:有向无环图,找出第1个点到第n个点的一条路径 ...

  6. POJ2488-A Knight's Journey(DFS+回溯)

    题目链接:http://poj.org/problem?id=2488 A Knight's Journey Time Limit: 1000MS   Memory Limit: 65536K Tot ...

  7. codeforces 721C C. Journey(dp)

    题目链接: C. Journey time limit per test 3 seconds memory limit per test 256 megabytes input standard in ...

  8. A Knight's Journey 分类: POJ 搜索 2015-08-08 07:32 2人阅读 评论(0) 收藏

    A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 35564 Accepted: 12119 ...

  9. HDOJ-三部曲一(搜索、数学)- A Knight's Journey

    A Knight's Journey Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) ...

随机推荐

  1. IL指令大全(转)

    名称 说明 Add 将两个值相加并将结果推送到计算堆栈上. Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上. Add.Ovf.Un 将两个无符号整数值相加,执行溢出检查,并且 ...

  2. Word Excel 操作总结

    1.与office无关使用 Aspose.Cells.dll,Aspose.Words.dll 2.使用Microsoft.Office.Interop.Excel Microsoft.Office. ...

  3. OpenStack 简介

    OpenStack是IaaS(基础设施即服务)组件,让任何人都可以自行建立和提供云端运算服务. 此外,OpenStack也用作建立防火墙内的"私有云"(Private Cloud) ...

  4. 用matlab实现同一个序列重复N倍

    同一个序列 重复N倍 怎么用matlab实现 可以使用repmat函数 repmat(A, 1, 3) 其中A即为复制的矩阵,1为纵向复制的次数,3即为横向复制的次数.

  5. why does turn off button means hibernate on my win8

    when I upgrated my laptop's system to win8.*,I found it's hibernate when I clicked turn off button. ...

  6. Intent传参数

    Intent 是Android 程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组 件想要执行的动作,还可以在不同组件之间传递数据.Intent 一般可被用于启动活动.启动 服务.以及发送广 ...

  7. Java--剑指offer(7)

    31.求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了.AC ...

  8. Android性能优化文章转载

    今天看到几篇比较好的文章就转了!(链接如下) 转载注明出处:Sunzxyong Android性能优化之Bitmap的内存优化 Android性能优化之常见的内存泄漏 Android最佳实践之Syst ...

  9. Swift微博项目--Swift中通过类名字符串创建类以及动态加载控制器的实现

    Swift中用类名字符串创建类(用到了命名空间) OC中可以直接通过类名的字符串转换成对应的类来操作,但是Swift中必须用到命名空间,也就是说Swift中通过字符串获取类的方式为NSClassFro ...

  10. swift 学习(二)基础知识 (函数,闭包,ARC,柯里化,反射)

    函数 func x(a:Int, b:Int)  {}   func x(a:Int, b:Int) -> Void {}  func x(a:Int, b:Int) ->(Int,Int ...