CodeForces 721C Journey(拓扑排序+DP)
<题目链接>
题目大意:
一个DAG图有n个点,m条边,走过每条边都会花费一定的时间,问你在不超过T时间的条件下,从1到n点最多能够经过几个节点。
解题分析:
对这个有向图,我们进行拓扑排序,并且在拓扑排序的过程中,用dp来进行状态的转移,$dp[i][j]$表示,在以$i$为终点的且经过$j$个点的路径中,所花的最少时间。
#include <bits/stdc++.h>
using namespace std; #define pb push_back
const int N = 5e3+;
int dp[N][N],path[N][N],indeg[N];
bool vis[N];
int n,m,T; struct Edge{ int to,val; };
vector<Edge>G[N]; inline void Toposort(){
queue<int>q;
memset(dp,0x3f,sizeof(dp));
dp[][]=;
for(int i=;i<=n;i++) if(!indeg[i]){
vis[i]=true;q.push(i);
}
while(!q.empty()){
int u=q.front();q.pop();
vis[u]=true;
for(int i=;i<G[u].size();i++){
int v=G[u][i].to,cost=G[u][i].val;
if(indeg[v]){
--indeg[v];
for(int j=;j<=n;j++){ //拓扑排序的过程中进行状态的转移
if(dp[v][j]>dp[u][j-]+cost){
dp[v][j]=dp[u][j-]+cost;
path[v][j]=u; //记录转移到该状态的节点
}
}
}
if(!indeg[v])q.push(v);
}
}
}
void Output(int now,int num){ //输出路径
if(now==){ printf("%d",now);return; }
Output(path[now][num],num-);
printf(" %d",now);
}
inline void Print(){
int res=;
for(int i=n;i>=;i--){
if(dp[n][i]<=T){ res=i; break; }
}printf("%d\n",res);
if(res)Output(n,res);
puts("");
}
int main(){
scanf("%d%d%d",&n,&m,&T);
for(int i=;i<=m;i++){
int u,v,w;scanf("%d%d%d",&u,&v,&w);
G[u].pb(Edge{v,w});
indeg[v]++;
}
Toposort();
Print();
}
CodeForces 721C Journey(拓扑排序+DP)的更多相关文章
- CodeForces - 919D Substring (拓扑排序+dp)
题意:将一个字符串上的n个字符视作点,给出m条有向边,求图中路径上最长出现的相同字母数. 分析:首先如果这张图中有环,则可以取无限大的字符数,在求拓扑排序的同时可以确定是否存在环. 之后在拓扑排序的结 ...
- BZOJ_3887_[Usaco2015 Jan]Grass Cownoisseur_强连通分量+拓扑排序+DP
BZOJ_3887_[Usaco2015 Jan]Grass Cownoisseur_强连通分量+拓扑排序+DP Description In an effort to better manage t ...
- POJ 3249 拓扑排序+DP
貌似是道水题.TLE了几次.把所有的输入输出改成scanf 和 printf ,有吧队列改成了数组模拟.然后就AC 了.2333333.... Description: MR.DOG 在找工作的过程中 ...
- [NOIP2017]逛公园 最短路+拓扑排序+dp
题目描述 给出一张 $n$ 个点 $m$ 条边的有向图,边权为非负整数.求满足路径长度小于等于 $1$ 到 $n$ 最短路 $+k$ 的 $1$ 到 $n$ 的路径条数模 $p$ ,如果有无数条则输出 ...
- 洛谷P3244 落忆枫音 [HNOI2015] 拓扑排序+dp
正解:拓扑排序+dp 解题报告: 传送门 我好暴躁昂,,,怎么感觉HNOI每年总有那么几道题题面巨长啊,,,语文不好真是太心痛辣QAQ 所以还是要简述一下题意,,,就是说,本来是有一个DAG,然后后来 ...
- 【BZOJ-1194】潘多拉的盒子 拓扑排序 + DP
1194: [HNOI2006]潘多拉的盒子 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 456 Solved: 215[Submit][Stat ...
- 【BZOJ5109】[CodePlus 2017]大吉大利,晚上吃鸡! 最短路+拓扑排序+DP
[BZOJ5109][CodePlus 2017]大吉大利,晚上吃鸡! Description 最近<绝地求生:大逃杀>风靡全球,皮皮和毛毛也迷上了这款游戏,他们经常组队玩这款游戏.在游戏 ...
- bzoj1093[ZJOI2007]最大半连通子图(tarjan+拓扑排序+dp)
Description 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u ...
- 【bzoj4011】[HNOI2015]落忆枫音 容斥原理+拓扑排序+dp
题目描述 给你一张 $n$ 个点 $m$ 条边的DAG,$1$ 号节点没有入边.再向这个DAG中加入边 $x\to y$ ,求形成的新图中以 $1$ 为根的外向树形图数目模 $10^9+7$ . 输入 ...
随机推荐
- poj 2955 Brackets (区间dp 括号匹配)
Description We give the following inductive definition of a “regular brackets” sequence: the empty s ...
- MongoDB用户及数据库管理命令
1.用户管理: 连接数据库: mongo 127.0.0.1:27017 切换到admin数据库: > use admin 创建管理员账户: db.createUser( { user: &qu ...
- log4j 初体验
1.Log4j简介 在应用程序中添加日志记录目的基于三个: 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作 跟踪代码运行时轨迹,作为日后审计的依据 担当集成开发环境 ...
- pthread_cond_wait学习笔记
pthread_cond_wait学习笔记 近期学习了线程等待和激活的相关知识. 先介绍几个api: pthread_cond_t表示多线程的条件变量,用于控制线程等待和就绪的条件. 一:条件变量的初 ...
- Pandas系列(十)-转换连接详解
目录 1. 拼接 1.1 append 1.2 concat 2. 关联 2.1 merge 2.2 join 数据准备 # 导入相关库 import numpy as np import panda ...
- Vue工具
首先介绍几个概念 webpack: 打包机.它能将我们的html,css,js.png,font进行打包,交给服务器. vue-cli: 用户生成Vue工程模板.(帮你快速开始一个vue的项目,也就是 ...
- [物理学与PDEs]第5章习题10 多凸函数一个例子
证明函数 $$\bex \hat W({\bf F})=\sedd{\ba{ll} \cfrac{1}{\det{\bf F}},&if\ \det{\bf F}>0,\\ +\inft ...
- 异常捕获try----catch
如果try语句里有return,返回的是try语句块中变量值. 详细执行过程如下: 如果有返回值,就把返回值保存到局部变量中: 执行jsr指令跳到finally语句里执行: 执行完finally语句后 ...
- java web中使用mysql语句遇到的问题
1.插入数据时遇到 Parameter index out of range (1 > number of parameters, which is 0). 的问题 有问题的代码: 改 ...
- 「luogu1417」烹调方案
题目链接 :https://www.luogu.org/problemnew/show/P1417 直接背包 -> 30' 考虑直接背包的问题:在DP时第i种食材比第j种食材更优,但由于j&l ...