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的狂热粉丝,他有一个对其中英雄的强弱比较,让你根据这些比较关系来给这些英雄排名.问一共有多少种排名方式. 思路: ...
随机推荐
- cmd 打开gitshell
C:\Users\Username\AppData\Local\GitHub\GitHub.appref-ms --open-shell
- 【lattice软核】MICO8流程
The LatticeMico System software is composed of three bundled applications: Mico System Builder (MS ...
- 【Android】Android清除本地数据缓存代码
最近做软件的时候,遇到了缓存的问题,在网上看到了这个文章,感觉不错.分享给大家看看 文章出处:http://www.cnblogs.com/rayray/p/3413673.html /* * 文 件 ...
- [转]SecureCRT连接主机时,无法从键盘输入
问题: SecureCRT连接主机时,无法从键盘输入 答案: 最近通过超级终端或者SecureCRT连接主机时,都只能读取设备信息,但是无法从键盘输入,进入不了配置状态,后来仔细检查了配置,居然是流控 ...
- 个推推送iOS版 常见问题详解
原文:http://www.oschina.net/question/1782938_234760 1.提交了.p12文件后多久可以测试? 提交后10分钟左右才可以测试,并不是立即生效的. 2 ...
- 4、android之actionbar用法
转: 上:http://blog.csdn.net/yuzhiboyi/article/details/32709833 下:http://blog.csdn.net/yuzhiboyi/articl ...
- IOS开发支付宝集成思路
一般情况下支付功能的交互流程 比如我们去某个APP去支付一个产品,流程为:1.用户点击支付->2.客户端请求服务器用户支付->3.服务器接收请求生成金额订单等要给第三方支付的一切信息,并生 ...
- Python的平凡之路(4)
一.迭代器&生成器 生成器定义: 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅 ...
- java EE实现动态SQL的
结果图 情况一:
- mac 下配置protobuf 3.0 golang环境
protobuf 3.0 与 之前的 protobuf 2.6 的语法是不一样的.需要重新安装一下,本机的环境是 OS X Yosemite 10.10.2 1. 不采用home brew安装,用 ...