Codeforces Round #374 (Div. 2) C. Journey DP
C. Journey
题目连接:
http://codeforces.com/contest/721/problem/C
Description
Recently Irina arrived to one of the most famous cities of Berland — the Berlatov city. There are n showplaces in the city, numbered from 1 to n, and some of them are connected by one-directional roads. The roads in Berlatov are designed in a way such that there are no cyclic routes between showplaces.
Initially Irina stands at the showplace 1, and the endpoint of her journey is the showplace n. Naturally, Irina wants to visit as much showplaces as she can during her journey. However, Irina's stay in Berlatov is limited and she can't be there for more than T time units.
Help Irina determine how many showplaces she may visit during her journey from showplace 1 to showplace n within a time not exceeding T. It is guaranteed that there is at least one route from showplace 1 to showplace n such that Irina will spend no more than T time units passing it.
Input
The first line of the input contains three integers n, m and T (2 ≤ n ≤ 5000, 1 ≤ m ≤ 5000, 1 ≤ T ≤ 109) — the number of showplaces, the number of roads between them and the time of Irina's stay in Berlatov respectively.
The next m lines describes roads in Berlatov. i-th of them contains 3 integers ui, vi, ti (1 ≤ ui, vi ≤ n, ui ≠ vi, 1 ≤ ti ≤ 109), meaning that there is a road starting from showplace ui and leading to showplace vi, and Irina spends ti time units to pass it. It is guaranteed that the roads do not form cyclic routes.
It is guaranteed, that there is at most one road between each pair of showplaces.
Output
Print the single integer k (2 ≤ k ≤ n) — the maximum number of showplaces that Irina can visit during her journey from showplace 1 to showplace n within time not exceeding T, in the first line.
Print k distinct integers in the second line — indices of showplaces that Irina will visit on her route, in the order of encountering them.
If there are multiple answers, print any of them
Sample Input
4 3 13
1 2 5
2 3 7
2 4 8
Sample Output
3
1 2 4
Hint
题意
给你一个n点m边的图,让你从1走到n,找到一条经过尽量多点的路径,且路径边权和小于等于T
然后输出路径。
题解:
直接DP,DP[i][j]表示在i点,当前经过了j个点的最小代价是多少
然后暴力转移就好了。
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 5005;
int dp[maxn][maxn],pre[maxn][maxn],n,m;
int k;
vector<int>E[maxn];
vector<int>val[maxn];
void dfs(int x,int num,int sp,int fa)
{
if(dp[x][num]<=sp)return;
dp[x][num]=sp;pre[x][num]=fa;
for(int i=0;i<E[x].size();i++)
if(sp+val[x][i]<=k)
dfs(E[x][i],num+1,sp+val[x][i],x);
}
vector<int> ppp;
void dfs2(int x,int y)
{
ppp.push_back(x);
if(pre[x][y]==-1)
{
cout<<ppp.size()<<endl;
for(int i=ppp.size()-1;i>=0;i--)
cout<<ppp[i]<<" ";
cout<<endl;
return;
}
else
dfs2(pre[x][y],y-1);
}
int main()
{
memset(pre,-1,sizeof(pre));
for(int i=0;i<maxn;i++)
for(int j=0;j<maxn;j++)
dp[i][j]=1e9+7;
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=m;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
E[a].push_back(b);
val[a].push_back(c);
}
dfs(1,1,0,-1);
for(int i=n;i>=2;i--)
{
if(dp[n][i]<=k)
{
dfs2(n,i);
break;
}
}
}
Codeforces Round #374 (Div. 2) C. Journey DP的更多相关文章
- Codeforces Round #374 (Div. 2) C. Journey —— DP
题目链接:http://codeforces.com/contest/721/problem/C C. Journey time limit per test 3 seconds memory lim ...
- 【Codeforces】Codeforces Round #374 (Div. 2) -- C. Journey (DP)
C. Journey time limit per test3 seconds memory limit per test256 megabytes inputstandard input outpu ...
- CF #374 (Div. 2) C. Journey dp
1.CF #374 (Div. 2) C. Journey 2.总结:好题,这一道题,WA,MLE,TLE,RE,各种姿势都来了一遍.. 3.题意:有向无环图,找出第1个点到第n个点的一条路径 ...
- Codeforces Round #374 (Div. 2) A B C D 水 模拟 dp+dfs 优先队列
A. One-dimensional Japanese Crossword time limit per test 1 second memory limit per test 256 megabyt ...
- 拓扑序+dp Codeforces Round #374 (Div. 2) C
http://codeforces.com/contest/721/problem/C 题目大意:给你有向路,每条路都有一个权值t,你从1走到n,最多花费不能超过T,问在T时间内最多能访问多少城市? ...
- Codeforces Round #374 (Div. 2) C(DAG上的DP)
C. Journey time limit per test 3 seconds memory limit per test 256 megabytes input standard input ou ...
- Codeforces Round #374 (Div. 2) A , B , C 水,水,拓扑dp
A. One-dimensional Japanese Crossword time limit per test 1 second memory limit per test 256 megabyt ...
- Codeforces Round #374 (Div. 2) C DAG上dp
C. Journey time limit per test 3 seconds memory limit per test 256 megabytes input standard input ou ...
- Codeforces Round #374 (div.2)遗憾题合集
C.Journey 读错题目了...不是无向图,结果建错图了(喵第4样例是变成无向就会有环的那种图) 并且这题因为要求路径点尽可能多 其实可以规约为限定路径长的拓扑排序,不一定要用最短路做 #prag ...
随机推荐
- MongoDB探索之路(二)——系统设计之CRUD
1.构造实体类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- python 音乐下载演示源代码
import requests import re api = 'http://music.taihe.com/search?' header = { 'User-Agent': 'Mozilla/5 ...
- 【LibreOJ】#6395. 「THUPC2018」城市地铁规划 / City 背包DP+Prufer序
[题目]#6395. 「THUPC2018」城市地铁规划 / City [题意]给定n个点要求构造一棵树,每个点的价值是一个关于点度的k次多项式,系数均为给定的\(a_0,...a_k\),求最大价值 ...
- 【译】使用OpenVAS 9进行漏洞扫描
本文译自Vulnerability Scanning with OpenVAS 9 part 1: Installation & Setup系列,本文将融合目前已经发表的四个部分. Part ...
- FFT(Rock Paper Scissors Gym - 101667H)
题目链接:https://vjudge.net/problem/Gym-101667H 题目大意:首先给你两个字符串,R代表石头,P代表布,S代表剪刀,第一个字符串代表第一个人每一次出的类型,第二个字 ...
- Dream------hive on spark
一.Hive on Spark是Hive跑在Spark上,用的是Spark执行引擎,而不是MapReduce,和Hive on Tez的道理一样. 并且用的是$HIVE_HOME/bin/hive,l ...
- 【SVN】SVN的trunk、branches、tag的使用以及分支的概念
SVN命令参考: https://www.cnblogs.com/wlsxmhz/p/5775393.html svn的存储结构一般建议在根目录下建立trunk.branches.tags这三个文 ...
- Ansible Tower系列 四(使用tower执行一个命令)【转】
在主机清单页面中,选择一个主机清单,进入后,选择hosts里的主机 Paste_Image.png 点击 RUN COMMANDS MODULE 选择 commandARGUMENTS 填写 ifco ...
- fastdfs:安装nginx
#安装依赖 yum -y install gcc yum -y install gcc-c++ yum -y install zlib-devel yum -y install pcre-devel ...
- 关于.NetCore 2.0 迁移到2.1的一些建议和问题
最近手欠升级了下VS2017到15.7版本 然后更新了下sdk到2.1.300版本 那么麻烦就来了,原有项目就带来了很多问题,更新所有包到最新就不用说了 下面说明下最主要存在的2问题: 第一个问题:调 ...