C. Journey bfs 拓扑排序+dp
补今天早训
这个是一个dp,开始我以为是一个图论,然后就写了一个dij和网络流,然后mle了,不过我觉得如果空间开的足够的,应该也是可以过的。
然后看了题解说是一个dp,这个dp要bfs去转移,为了保证每条边只被转移一次,还要用拓扑排序,
说了这么多,感觉很复杂,其实不是,这个题目还是挺简单的。
如果你知道这个是一个dp+拓扑排序,然后就很简单了。
dp[i][j] 表示从 1走到 i 这个城市,其中一共走了 j 个城市的最短时间。用拓扑排序是保证每一个城市只会去转移一次,这样才不会超时。
- #include <cstring>
- #include <queue>
- #include <cstdlib>
- #include <cstdio>
- #include <iostream>
- #include <string>
- #include <algorithm>
- #include <map>
- #include <vector>
- #define inf 0x3f3f3f3f
- #define inx64 0x3f3f3f3f3f3f3f3f
- using namespace std;
- typedef long long ll;
- const int maxn = 5e3 + ;
- struct node {
- int u, v, w;
- node(int u = , int v = , int w = ) :u(u), v(v), w(w) {}
- };
- vector<node>e;
- vector<int>G[maxn];
- int dp[maxn][maxn], in[maxn];
- void add(int u, int v, int w) {
- e.push_back(node(u, v, w));
- G[u].push_back(e.size() - );
- in[v]++;
- }
- int p[][];
- int n, m, t;
- void bfs(int s) {
- queue<int>que;
- for (int i = ; i <= n; i++) {
- if (in[i] == ) que.push(i);
- }
- while (!que.empty()) {
- int u = que.front(); que.pop();
- for (int i = ; i < G[u].size(); i++) {
- node now = e[G[u][i]];
- int v = now.v;
- for (int j = ; j <= n; j++) {
- if (dp[v][j] > dp[u][j - ] + now.w) {
- dp[v][j] = dp[u][j - ] + now.w;
- p[v][j] = u;
- }
- }
- in[v]--;
- if (in[v] == ) que.push(v);
- }
- }
- }
- int b[maxn];
- int main() {
- scanf("%d%d%d", &n, &m, &t);
- while (m--) {
- int u, v, w;
- scanf("%d%d%d", &u, &v, &w);
- add(u, v, w);
- }
- memset(dp, inf, sizeof(dp));
- dp[][] = ;
- bfs();
- int ans = ;
- for (int i = ; i <= n; i++) if (dp[n][i] <= t) ans = i;
- printf("%d\n", ans);
- int u = n;
- for (int i = ans; i >= ; i--) {
- b[i] = u;
- u = p[u][i];
- }
- for (int i = ; i <= ans; i++) printf("%d ", b[i]);
- printf("\n");
- return ;
- }
dp+拓扑排序
C. Journey bfs 拓扑排序+dp的更多相关文章
- POJ 3249 拓扑排序+DP
貌似是道水题.TLE了几次.把所有的输入输出改成scanf 和 printf ,有吧队列改成了数组模拟.然后就AC 了.2333333.... Description: MR.DOG 在找工作的过程中 ...
- BZOJ_3887_[Usaco2015 Jan]Grass Cownoisseur_强连通分量+拓扑排序+DP
BZOJ_3887_[Usaco2015 Jan]Grass Cownoisseur_强连通分量+拓扑排序+DP Description In an effort to better manage t ...
- [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$ . 输入 ...
- 【bzoj1093】[ZJOI2007]最大半连通子图 Tarjan+拓扑排序+dp
题目描述 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:对于u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u的有向路径. ...
随机推荐
- Python财经数据接口包TuShare的使用
安装TuShare 方式1:pip install tushare 方式2:访问https://pypi.python.org/pypi/tushare/下载安装 方式3:将源代码下载到本地pytho ...
- Weblogic-SSRF 漏洞复现
0x01 环境搭建 我这里使用的是vulhub,它几乎包含了所有的漏洞环境.(建议安装在ubuntu上) 有需要的小伙伴来企鹅群自取. 安装好vulhub之后需要cd 到weblogic ssrf 目 ...
- vscode连接云服务,搭建Python远程开发
配置Python远程开发环境前提 配置步骤 1.windows 10 开发机配置 win10 1809后支持ssh ssh-keygen -t rsa -b 4096 #会显示生成到的目录C:\Use ...
- Python语法详解
python语法解析 目录 python语法解析 一.顺序结构 二.分支结构 2.1 if 的基本语法 2.2 if 的基本应用 三.循环结构 3.1 while 语法 3.1.1 语法结束条件 3. ...
- 【draft】Team project :Bing dictionary plug-in
课后~ 开会调研开会调研开会~ 在和Bing词典负责人进行了可行性的深入磋商后,我们对本次选题有了更加清晰的认识~困难好多~然而终于敲定了项目内容,我们的目标是这样一款神奇的插件,它帮你记录下新近查询 ...
- V - Infinite Prefixes CodeForces - 1295B math
天哪!!菜到家啦. 数学+思维. 首先求出一个周期内cnt0-cnt1=c的个数,如果C=0,那么只要在一个周期内有前缀等于x,那么答案就是-1,否则答案就是0 如果C!=0,列一下方程x=t*c+a ...
- Python刷CSDN阅读数(仅供娱乐)
#!/usr/bin/env python # -*- coding: utf-8 -*- """ @File:csdn_reads.py @E-mail:3649427 ...
- Django文档阅读-Day1
Django文档阅读-Day1 Django at a glance Design your model from djano.db import models #数据库操作API位置 class R ...
- vue路由中 Navigating to current location ("/router") is not allowed
报错原因:多次点击同一路由,导致路由被多次添加 解决方法: router/index中添加以下代码: //router/index.js Vue.use(VueRouter) //导入vue路由 co ...
- java集合List
需求:List集合存储字符串并遍历.List集合的特点: 有序(存储和取出的元素一致),可重复的.package javatest; import java.util.ArrayList;import ...