Codeforces 721C [dp][拓扑排序]
/*
题意:给你一个有向无环图。给一个限定t。
问从1点到n点,在不超过t的情况下,最多可以拜访几个点。
保证至少有一条路时限不超过t.
思路:
1.由无后向性我们可以知道(取决于该图是一个DAG),这题一定可以dp。
2.dp[i][j]代表,到达点i,并且拜访了j个城市的最短时间。
wa点:
没有初始化数组中的0..
*/ #include<bits/stdc++.h>
#define N 5050
using namespace std;
int inf=0x3f3f3f3f;
int num[N];
bool vis[N];
int dp[N][N];
struct edge{
int id;
int w;
edge *next;
};
edge edges[N];
edge *adj[N];
int ednum;
inline void addedge(int a,int b,int w){
edge *tmp=&edges[ednum++];
tmp->id=b;
tmp->w=w;
tmp->next=adj[a];
adj[a]=tmp;
}
int fromx[N][N];
int main()
{
int n,m,t,a,b,w;
scanf("%d%d%d",&n,&m,&t);
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
dp[i][j]=inf;
}
}
for(int i=;i<=m;i++){
scanf("%d%d%d",&a,&b,&w);
addedge(a,b,w);
num[b]++;
}
dp[][]=;
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
if(vis[j]||num[j])continue;
vis[j]=;
for(edge *it=adj[j];it;it=it->next){
num[it->id]--;
for(int k=;k<=n;k++){
if(dp[it->id][k]>dp[j][k-]+it->w){
dp[it->id][k]=dp[j][k-]+it->w;
fromx[it->id][k]=j;
}
}
}
break;
}
} for(int i=n;i>=;i--){
if(dp[n][i]<=t){
printf("%d\n",i);
stack<int>ss;
int x=n,y=i;
ss.push(n);
while(fromx[x][y]!=){
ss.push(fromx[x][y]);
x=fromx[x][y];
y--;
}
ss.push();
while(!ss.empty()){
int pp=ss.top();
ss.pop();
printf("%d ",pp);
}
break;
}
} }
Codeforces 721C [dp][拓扑排序]的更多相关文章
- CodeForces 721C Journey(拓扑排序+DP)
<题目链接> 题目大意:一个DAG图有n个点,m条边,走过每条边都会花费一定的时间,问你在不超过T时间的条件下,从1到n点最多能够经过几个节点. 解题分析:对这个有向图,我们进行拓扑排序, ...
- The Preliminary Contest for ICPC Asia Nanjing 2019 - D Robots(概率dp+拓扑排序)
这题概率dp + 拓扑排序可以写 改天补解释 #include <bits/stdc++.h> using namespace std; const int maxn=1e5+10; ve ...
- CodeForces - 919D Substring (拓扑排序+dp)
题意:将一个字符串上的n个字符视作点,给出m条有向边,求图中路径上最长出现的相同字母数. 分析:首先如果这张图中有环,则可以取无限大的字符数,在求拓扑排序的同时可以确定是否存在环. 之后在拓扑排序的结 ...
- Codeforces Round #460 (Div. 2)_D. Substring_[dp][拓扑排序]
题意:一个有向图,每个结点 被赋予一个小写字母,一条路径的value等与这条路径上出现次数最多的字母的数目,求该图的最大value 比赛时,用dfs超时,看官方题解用的dp和拓扑排序,a--z用0-2 ...
- Codeforces 919D Substring (拓扑排序+树形dp)
题目:Substring 题意:给你一个有向图, 一共有n个节点 , m条变, 一条路上的价值为这个路上出现过的某个字符最多出现次数, 现求这个最大价值, 如果价值可以无限大就输出-1. 题解:当这个 ...
- Codeforces 919D Substring ( 拓扑排序 && DAG上的DP )
题意 : 给出含有 N 个点 M 条边的图(可能不连通或者包含环),每个点都标有一个小写字母编号,然后问你有没有一条路径使得路径上重复字母个数最多的次数是多少次,例如图上有条路径的顶点标号顺序是 a ...
- cf919D 线性dp+拓扑排序
/* 给定一张有向图,图上每个结点都有一个字符,现在要求出一条路径,要使路径上某字符出现的次数最多 如果有环,输出-1即可 拓扑排序+dp dp[i][26]表示排序到结点i时26个字符出现的次数 在 ...
- BZOJ4011:[HNOI2015]落忆枫音(DP,拓扑排序)
Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出这样一个问题. 「相信吧.不然我们是什么,一团肉吗?要不是有灵魂……我们也 ...
- ZJU 1346 Comparing Your Heroes 状态压缩DP 拓扑排序的计数
做多校的时候遇见一个求拓扑排序数量的题,就顺便来写了一下. 题意: 你有个朋友是KOF的狂热粉丝,他有一个对其中英雄的强弱比较,让你根据这些比较关系来给这些英雄排名.问一共有多少种排名方式. 思路: ...
随机推荐
- 1900. Brainwashing Device
http://acm.timus.ru/problem.aspx?space=1&num=1900 题目大意: 有N个车站,相邻车站之间形成一个段,这样就有N-1个段,每个段最多可以放一个洗脑 ...
- SQLite存储类(数据类型)
SQLite数据类型更普遍,采用动态类型系统. 说是数据类型,更像是存储类,如:INTEGER存储类就包含多种不同长度的整数数据类型 [INTEGER]带符号的整数类型 [REAL]浮点值,小数类型 ...
- SQL中case when then用法
sql语句判断方式之一Case.具有两种格式:简单的Case函数.Case搜索函数. 1.简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' E ...
- dyld: Symbol not found: _OBJC_CLASS_$_NSURLSessionDataTask
dyld: Symbol not found: _OBJC_CLASS_$_NSURLSessionDataTask Referenced from: /var/mobile/Applicatio ...
- js 网站顶部通用导航
js代码: (function (scriptId, styleVersion) { var hotgameData = { 'title': '热门游戏', 'list': [ {'text': ' ...
- 【转】Styling And Animating SVGs With CSS
原文转自:http://www.smashingmagazine.com/2014/11/03/styling-and-animating-svgs-with-css/?utm_source=CSS- ...
- 解决 xx.h has been modified since the precompiled header 系统头文件被修改
fatal error: file '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Dev ...
- 常用加实用的Linux命令
命令是计算机执行任务的指令.可以使用命令去关闭计算机,或者列出当前目录的文件列表,或当前文本的内容,或者屏幕显示一条消息等. 下面是各种基本的命令可供参考. 1.Ls - List ls会列举出当前工 ...
- source insight 相对路径
source insight项目 在移动到另外一个地方时,会因为之前是绝对路径而导致,项目中的文件都不可用,需要重新把这些文件添加一遍. 这是个令人讨厌的事情. 解决办法为创建项目时设定为绝对路径.方 ...
- 一些JavaScript的技巧、秘诀和最佳实践
文章分享一些JavaScript的技巧.秘诀和最佳实践,除了少数几个外,不管是浏览器的JavaScript引擎,还是服务器端JavaScript解释器,均适用. 本文中的示例代码,通过了在Google ...