题解:洛谷 P1137 旅行计划
- 标签:图论,拓扑,dp
题意
给定一张 \(n\) 个点 \(m\) 条边的 DAG,对于每个 \(i\),求以它为终点最多经过多少个点?
思路
由于是 DAG,求的是终点 \(i\) 经过的所有点,而刚好拓扑序就满足这个。
那么就可以考虑拓扑排序。
设 \(f_i\) 是以 \(i\) 为终点的最多结点数,那么就有转移方程 \(f_v=max(f_v,f_u+1)\)。
在拓扑排序过程中,所有入度为 \(0\) 的 \(v\),\(v\) 可以从其它节点过来,也就是它的前驱 \(u\)。
即 \(u\) 的方案数 \(f_u\) 再加 \(1\)。
当然初始化时对于所有入度为 \(0\) 的 \(u\),\(f_u=1\)。
代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,m,x,y,in[N],f[N];
vector<int> g[N];
void topo(){
queue<int> q;
for(int i=1;i<=n;i++) if(in[i]==0) q.push(i),f[i]=1;
while(!q.empty()){
int u=q.front();
q.pop();
for(auto i:g[u]){
if(--in[i]==0){
f[i]=f[u]+1;
q.push(i);
}
}
}
}
signed main(){
ios::sync_with_stdio(0);
cin>>n>>m;
for(int i=1;i<=m;i++)
cin>>x>>y;
g[x].push_back(y),in[y]++;
}
topo();
for(int i=1;i<=n;i++) cout<<f[i]<<endl;
return 0;
}
题解:洛谷 P1137 旅行计划的更多相关文章
- 洛谷P1137 旅行计划
P1137 旅行计划 题目描述 小明要去一个国家旅游.这个国家有N个城市,编号为1-N,并且有M条道路连接着,小明准备从其中一个城市出发,并只往东走到城市i停止. 所以他就需要选择最先到达的城市,并制 ...
- 洛谷 P1137 旅行计划
旅行计划 待证明这样dp的正确性. #include <iostream> #include <cstdio> #include <cstring> #includ ...
- 洛谷P1137 旅行计划 解题报告(拓扑排序+DP)
我看了一下其他大佬的题解,大部分都是拓扑排序加上DP.那么我想有的人是不明白为什么这么做的,拓扑排序有什么性质使得可以DP呢?下面我就提一下. 对一个有向无环图(Directed Acyclic Gr ...
- 洛谷 P1137 旅行计划 (拓扑排序+dp)
在DAG中,拓扑排序可以确定dp的顺序 把图的信息转化到一个拓扑序上 注意转移的时候要用边转移 这道题的dp是用刷表法 #include<bits/stdc++.h> #define RE ...
- 洛谷——P1137 旅行计划
https://www.luogu.org/problem/show?pid=1137 题目描述 小明要去一个国家旅游.这个国家有N个城市,编号为1-N,并且有M条道路连接着,小明准备从其中一个城市出 ...
- 洛谷p1137旅行计划
题面 关于拓扑排序 因为这好几次考试的题目里都有在DAG中拓扑排序求最长/短路 txt说它非常的好用 就找了个题做了下 拓扑排序就是寻找图中所有的入度为零的点把他入队 然后再枚举它所有的连到的点,只要 ...
- 洛谷 P1251 餐巾计划问题(线性规划网络优化)【费用流】
(题外话:心塞...大部分时间都在debug,拆点忘记加N,总边数算错,数据类型标错,字母写错......) 题目链接:https://www.luogu.org/problemnew/show/P1 ...
- 洛谷 P2680 运输计划-二分+树上差分(边权覆盖)
P2680 运输计划 题目背景 公元 20442044 年,人类进入了宇宙纪元. 题目描述 公元20442044 年,人类进入了宇宙纪元. L 国有 nn 个星球,还有 n-1n−1 条双向航道,每条 ...
- BZOJ4326或洛谷2680 运输计划
BZOJ原题链接 洛谷原题链接 用\(LCA\)初始化出所有运输计划的原始时间,因为答案有单调性,所以二分答案,然后考虑检验答案. 很容易想到将所有超出当前二分的答案的运输计划所经过的路径标记,在这些 ...
- loj2734「JOISC 2016 Day 2」女装大佬 || 洛谷P3615 如厕计划
loj2734 洛谷P3615 http://218.5.5.242:9021/problem/185 不会做... 题解(来自ditoly): 这一步更详细的解释(来自kkksc03): 还是从后面 ...
随机推荐
- ABAP 7.58 中支持任意精度算术的新类
1. 引言 通常,有两种对编程语言的改进.第一种是让困难的事情变得简单,第二种是让不可能的事情变为可能.本文介绍的是任意精度算术,它属于第二类:使在ABAP中原本不可能的事情成为可能. 过去已经可以在 ...
- 【PG】PostgreSQL12安装
场景:感受一下PostgreSQL12.可以通过如下方式安装: 1.创建psotgres用户 groupadd postgres useradd -g postgres postgres 2.查看操作 ...
- ruby on rails中sidekiq的使用
参考文章: https://www.jianshu.com/p/7ea473097023 安装redis 配置redis 配置sidekiq所依赖的redis位置,必须同时定义sidekiq的serv ...
- GaussDB细粒度资源管控技术透视
本文分享自华为云社区<[GaussTech速递]技术解读之细粒度资源管控>,作者:GaussDB 数据库. 背景 对数据库集群内资源管控与资源隔离一直是企业客户长久以来的诉求.华为云Gau ...
- 【项目学习】Anchor:一种提供稳定币存款低波动收益率的去中心化的储蓄协议
简介 基于稳定币的获利产品. 贷方人放出稳定币以供借款.借方通过抵押资产(base asset)的方式,以低于协议定义的借贷比率借入稳定币.Anchor 协议使用抵押资产进行质押以获得奖励,然后将质押 ...
- C语言:输出大写的三角形字母表(进阶)
//该程序只支持输入大写字母,输入G,就输出A~G的三角形字母表 /* 从A到Z的输出数量应该是1 3 5 7 9..... */ 利用这个特性,对空格和字母进行输出 A字母在 ...
- DashVector x 通义千问大模型:打造基于专属知识的问答服务
本教程演示如何使用向量检索服务(DashVector),结合LLM大模型等能力,来打造基于垂直领域专属知识等问答服务.其中LLM大模型能力,以及文本向量生成等能力,这里基于灵积模型服务上的通义千问 A ...
- npm 淘宝镜像的安装
方法一: 使用阿里定制的cnpm命令行工具代替默认的npm,输入以下代码 npm install -g cnpm --registry=https://registry.npm.taobao.org ...
- TS码流解析(三)PES
我们常说的音视频数据流在TS中被称为Elementary Stream(ES),也称为原始码流(裸流).ES流本身不含有传输所需的所有信息,为了在传输过程中同时携带PTS(Presentation T ...
- 使用 Microsoft Edge WebDriver 自动执行和测试 WebView2 应用 Selenium
https://learn.microsoft.com/zh-cn/microsoft-edge/webview2/how-to/webdriver