传送门

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

所以简单记录一下。

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

 //cf c
 //by Cydiater
 //2016.9.30
 #include <iostream>
 #include <cstdio>
 #include <cstring>
 #include <string>
 #include <algorithm>
 #include <queue>
 #include <map>
 #include <ctime>
 #include <cmath>
 #include <cstdlib>
 #include <iomanip>
 using namespace std;
 #define ll long long
 #define up(i,j,n)       for(int i=j;i<=n;i++)
 #define down(i,j,n)     for(int i=j;i>=n;i--)
 ;
 const int oo=0x3f3f3f3f;
 inline ll read(){
       ,f=;
       ;ch=getchar();}
       +ch-';ch=getchar();}
       return x*f;
 }
 ,N,M,T,ans=,lastnode[MAXN],q[MAXN],top=;
 bool vis[MAXN];
 ll f[][];
 struct edge{
       int y,next;ll v;
 }e[MAXN];
 namespace solution{
       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;}
       void init(){
             N=read();M=read();T=read();
             up(i,,M){
                   ll x=read(),y=read(),v=read();
                   insert(y,x,v);
             }
       }
       void dfs(int node){
             if(vis[node])return;
             for(int i=LINK[node];i;i=e[i].next)if(!vis[e[i].y])dfs(e[i].y);
             )
                   up(j,,N)]+e[i].v<f[node][j]){
                         f[node][j]=f[e[i].y][j-]+e[i].v;
                         if(node==N&&f[node][j]<=T)ans=max(ans,j);
                   }
             vis[node]=;
       }
       void re_dfs(int node,int num){
             ){
                   ]==f[node][num]-e[i].v){
                         lastnode[node]=e[i].y;
                         re_dfs(e[i].y,num-);
                         return;
                   }
             }
       }
       void DP(){
             memset(f,,sizeof(f));
             f[][]=;
             dfs(N);
       }
       void output(){
             cout<<ans<<endl;
             )return;
             re_dfs(N,ans);
             ;i=lastnode[i])q[++top]=i;
             down(i,top,)printf("%d ",q[i]);
             puts("");
       }
 }
 int main(){
       //freopen("input.in","r",stdin);
       using namespace solution;
       init();
       DP();
       output();
       ;
 }

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. MVC+EF 理解和实现仓储模式和工作单元模式

    MVC+EF 理解和实现仓储模式和工作单元模式 原文:Understanding Repository and Unit of Work Pattern and Implementing Generi ...

  2. [c++]printf的编译器静态检测

    经常会用到C的格式化字符串,gcc/clang的扩展,都是可以进行字符串和可变参数的检测,不匹配,就会爆warning. 自己手写的,需要加上一点代码,否则不会进行检测. 1.  可变参数 void ...

  3. 正则表达式语法(msdn)

    “正则表达式”描述在搜索文本正文时要匹配的一个或多个字符串.该表达式可用作一个将字符模式与要搜索的字符串相匹配的模板. 正则表达式包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符” ...

  4. 基于FPGA的通信系统实验

    伪随机信号发生器 1.伪随机信号发生器原理 伪随机信号发生器又叫PN序列发生器或者是m序列发生器.m序列是一种线性反馈寄存器序列,m序列的产生可以利用r级寄存器产生长度为2^r-1的m序列,该实验中采 ...

  5. java 中遍历hashmap 和hashset 的方法

    一.java中遍历hashmap:    for (Map.Entry<String, Integer> entry : tempMap.entrySet()) {     String ...

  6. shell note

    1 输出重定向:ll > aaa 将输出内容 添加到aaa文件中 ll >> aaa将输出内容追加到aaa中 ll &>> abc 将输出内容不论正确或错误都保存 ...

  7. 【Python】 [基础] 条件判断 与 循环 与dict和set

    # 条件判断 elif:  else if 的作用 注意: : [冒号]BMI =w/(h*h) if BMI<15:    print('较轻')elif BMI<25:    prin ...

  8. Android四大组件之Activity详解——创建和启动Activity

    前面我们已经对Activity有过简单的介绍: Android开发——初始Activity Android开发——响应用户事件 Android开发——Activity生命周期 先来看一下最终结果 项目 ...

  9. 1019在winddow上面安装MYSQL服务

    -- 在WINDOWS上安装MYSQL,利用运行包直接安装-- 第一步复制文件拷贝到对应目录-- 第二步修改配置文件,创建DATA目录[client]port=3312 [mysql]default- ...

  10. SimpleDateFormate的使用

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public cl ...