比赛的时候写了个记忆化搜索,超时了。

后来学习了一下,这种题目应该用拓扑排序+DP来做。

dp[][]保存走到[第i个节点][走过j个点]时所用的最短时间。

pre[][]用前驱节点求路径

然后遍历一下dp[n][],求满足t范围的最大下标。

#include <iostream>
#include <queue>
#include <cstdio>
#include <vector>
#include <stack>
#define N 5050
#define INF 1000000200
//#define LL long long int
using namespace std;
int n,m,sum,cnt,flag,t;
int deg[N];
vector<int> g[N],f[N];//保存后继节点
int dp[N][N],pre[N][N];//保存走到第i个点,走过j个点时所用时间
struct cmp
{
bool operator()(int a,int b)
{
return a>b;
}
};
void topoSort()
{
priority_queue<int,vector<int>,cmp> q;
for(int i=;i<=n;i++)
if(deg[i]==)
q.push(i),deg[i]--;
while(!q.empty())
{
//if(q.size()>1) 可用于判断是否充分排序。
//如果有多个入度为0的同时入队,说明他们之间没有明确的排序条件。
int u=q.top();
q.pop();
sum--;//可用于判断是否有冲突,如果有冲突,就会导致两者或者已上的节点入度无法降为0
for(int i=;i<g[u].size();i++)
{
int e=g[u][i];
deg[e]--;
for(int j=;j<=n;j++)
{
//cout<<dp[u][i]<<' '<<e<<endl;
if(dp[e][j]>dp[u][j-]+f[u][i])
dp[e][j]=dp[u][j-]+f[u][i],pre[e][j]=u;
}
}
for(int i=;i<=n;i++)
if(deg[i]==)
q.push(i),deg[i]--;
}
}
void ini()
{
for(int i=;i<=n;i++)
deg[i]=,flag=,g[i].clear(),f[i].clear();
cnt=,sum=n;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
dp[i][j]=t+,pre[i][j]=-;
dp[][]=;
}
void add(int u,int v,int fe)
{
deg[v]++;
g[u].push_back(v);
f[u].push_back(fe);
}
int main() {
//cin.sync_with_stdio(false);
scanf("%d%d%d",&n,&m,&t);
ini();
for(int i=;i<m;i++)
{
int u,v,fe;
scanf("%d%d%d",&u,&v,&fe);
add(u,v,fe);
}
//cout<<dp[1][2]<<endl;
topoSort();
int Maxp=-;
for(int i=;i<=n;i++)
{
if(dp[n][i]<=t)
Maxp=i;//求最大合法经过点数
}
stack<int> ss;
int pos=n,lef=Maxp;
cout<<Maxp<<endl;
while(pos!=-)
{
ss.push(pos);
pos=pre[pos][lef],lef--;
}
//ss.push(1);
while(ss.size()>)
cout<<ss.top()<<' ',ss.pop();
cout<<ss.top()<<endl;
ss.pop(); return ;
}

CF-721C DAG图拓扑排序+费用DP的更多相关文章

  1. BZOJ_1916_[Usaco2010 Open]冲浪_分层图+拓扑排序+DP

    BZOJ_1916_[Usaco2010 Open]冲浪_分层图+拓扑排序+DP Description 受到秘鲁的马丘比丘的新式水上乐园的启发,Farmer John决定也为奶牛们建 一个水上乐园. ...

  2. DAG及拓扑排序

    1.有向无环图和拓扑排序 有向无环图(Directed Acyclic Graph,简称DAG):拓扑排序指的对DAG一个有序的线性排列.即每次选出一个没有入度的节点,然后输出该点并将节点和其相关连的 ...

  3. HDU4857——逃生(反向建图+拓扑排序)(BestCoder Round #1)

    逃生 Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能排成一行. 现在有n个人,从1标号到n.同时有一些奇怪的约束条件,每个都形如:a必须在b之前.同时,社会 ...

  4. POJ3687——Labeling Balls(反向建图+拓扑排序)

    Labeling Balls DescriptionWindy has N balls of distinct weights from 1 unit to N units. Now he tries ...

  5. Bzoj 1565: [NOI2009]植物大战僵尸 最大权闭合图,拓扑排序

    题目: http://cojs.tk/cogs/problem/problem.php?pid=410 410. [NOI2009] 植物大战僵尸 ★★★   输入文件:pvz.in   输出文件:p ...

  6. BZOJ_4383_[POI2015]Pustynia_线段树优化建图+拓扑排序

    BZOJ_4383_[POI2015]Pustynia_线段树优化建图+拓扑排序 Description 给定一个长度为n的正整数序列a,每个数都在1到10^9范围内,告诉你其中s个数,并给出m条信息 ...

  7. 大数据工作流任务调度--有向无环图(DAG)之拓扑排序

    点击上方蓝字关注DolphinScheduler(海豚调度) |作者:代立冬 |编辑:闫利帅 回顾基础知识: 图的遍历 图的遍历是指从图中的某一个顶点出发,按照某种搜索方法沿着图中的边对图中的所有顶点 ...

  8. 拓扑排序+数学+DP【p1685】游览

    Description 顺利通过了黄药师的考验,下面就可以尽情游览桃花岛了! 你要从桃花岛的西头开始一直玩到东头,然后在东头的码头离开.可是当你游玩了一次后,发现桃花岛的景色实在是非常的美丽!!!于是 ...

  9. HDU 5811 Colosseo(拓扑排序+单调DP)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5811 [题目大意] 给出 一张单向图,现在将其划分成了两个部分,问划分之后的点是否分别满足按照一定 ...

随机推荐

  1. 【控制分片分配】控制Elasticsearch分片和副本的分配

    ES集群中索引可能由多个分片构成,并且每个分片可以拥有多个副本.通过将一个单独的索引分为多个分片,我们可以处理不能在一个单一的服务器上面运行的大型索引,简单的说就是索引的大小过大,导致效率问题.不能运 ...

  2. Vue.extend提供自定义组件的构造器

    Vue.extend 返回的是一个“扩展实例构造器”,也就是预设了部分选项的Vue实例构造器.经常服务于Vue.component用来生成组件,可以简单理解为当在模板中遇到该组件名称作为标签的自定义元 ...

  3. LeetCode - 198 简单动态规划 打家劫舍

    你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给定一个代表每 ...

  4. 洛谷P1803 凌乱的yyy dp

    我要日更嘤嘤嘤>_< 原题戳>>https://www.luogu.org/problem/show?pid=1803<<(其实是戳不动的,复制粘贴吧) 题目背景 ...

  5. dynamic web module讲解

    一.java的web系统有多种类型,比如静态的和动态的,然后动态的java web project要设置dynamic web module,也就是动态网页模型,他必须要和对应的服务器搭配好了才能跑, ...

  6. spring与mybatis四种整合方法

    转载: 1.采用数据映射器(MapperFactoryBean)的方式,不用写mybatis映射文件,采用注解方式提供相应的sql语句和输入参数.   (1)Spring配置文件: <!-- 引 ...

  7. PHP中cookie思维导图

  8. python-ConfigParser模块【读写配置文件】

    对python 读写配置文件的具体方案的介绍 1,函数介绍 import configParser 如果Configparser无效将导入的configParser 的C小写 1.1.读取配置文件 - ...

  9. MySql查询功能梳理

    CREATE DATABASE CristinMysql Create table employee( eId int(9) not null auto_increment, eName varcha ...

  10. C#窗口禁止移动的方法

    1,窗口属性中有locked属性,设置为true. (在自己进行编码的时候并没能找到这个属性,貌似只能在窗口设计时进行设置,故此方法无可控性) 2,窗口属性中有FormBorderStyle属性,设置 ...