首页 > 其他分享 >题解:洛谷 P1137 旅行计划

题解:洛谷 P1137 旅行计划

时间:2024-04-27 21:44:24浏览次数:30  
标签:终点 洛谷 个点 int 题解 拓扑 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;
}

标签:终点,洛谷,个点,int,题解,拓扑,P1137
From: https://www.cnblogs.com/Jessie-Pu/p/18162609

相关文章

  • CF1842H Tenzing and Random Real Numbers 题解
    题目链接点击打开链接题目解法实数的概率好反直觉!对\(1\)做限制不是很好做,考虑变成正负性的限制(即对\(0\)做限制)令\(y_i=x_i-0.5\),那么限制就变成了\(y_i+y_j\le0,\;y_i+y_j\ge0\)这里要给出一些实数概率的结论:实数下,\(x=y\)的概率为\(0\),因为\(\frac{1}{\inft......
  • CAUC_CTF 题解
    caucctfwpez_隐写如果计算机是中国人发明的Welcome!easy_rsafromCrypto.Util.numberimport*importgmpy2importlibnumimportrandomimporthashlibn=0x52d483c27cd806550fbe0e37a61af2e7cf5e0efb723dfc81174c918a27627779b21fa3c851e9e94188eaee3d5cd6f7524......
  • [题解]P2015 二叉苹果树
    P2015二叉苹果树树形dp,一般用dfs辅助解决。当我们搜索到\(u\),此时剩下\(cnt\)条边可以用,也就是说\(u\)为根节点的子树最多可以保留\(cnt\)条边。由于上一层的需求,我们显然需要枚举剩余边数\(i\)(\(1\leqi\leqcnt\))。接下来对于每个\(i\),我们考虑剩余的\(u\)条边可以怎么放。......
  • 洛谷P5597 复读
    洛谷P5597复读首先概括一下题意:文中给出三个指令L(命令机器人向当前节点的左子节点走)、R(命令机器人向当前节点的右子节点走)、U(命令机器人向当前节点的父亲节点走)以及一颗二叉树。初始状态,机器人在二叉树的根节点。当机器人处于二叉树的根节点时,不可以执行指令U,但是机器人可以走......
  • 题解:P10329 [UESTCPC 2024] Add
    Add题意将序列进行一系列的操作,输出对\(a_{1}\)的期望值。题目中操作说的比较明了,再次就不特殊声明了。思路据题意所知,每一个\(n\)应该对应了一个固定的答案。于是我就想到可以打表,就打出了下面的式子。n=1时ans=1n=2时ans=5n=3时ans=14n=4时ans=30n=5时ans=5......
  • vue,js直接导出excel,xlsx的方法,XLSX_STYLE 行高设置失效的问题解决
    1、先安装依赖:xlsx、xlsx-style、file-saver三个包npminstallxlsxxlsx-stylefile-saver2、引入:<script>import*asXLSXfrom'xlsx/xlsx.mjs'importXLSX_STYLEfrom'xlsx-style';import{saveAs}from'file-saver';exportdefau......
  • 题解笔记
    P1196银河英雄传说带权并查集(根搭积木很像):对于每个点,分别记录所属链的头结点、该点到头结点的距离以及它所在集合的大小。每次合并将y接在x的尾部,改变y头的权值和所属链的头结点,同时改变x的尾节点。注意:每次查找的时候也要维护每个节点的权值。每次查询时计算两点的权值差。......
  • 「洛谷」题解:P1008 三连击
    题目传送门题目背景本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。题目描述将\(1,2,\ldots,9\)共\(9\)个数分成\(3\)组,分别组成\(3\)个三位数,且使这\(3\)个三位数构成\(1:2:3\)的比例,试求出所有满足条件的......
  • [题解][2021浙江CCPC] Shortest Path Query
    题目描述输入一张无向图,对于无向图的每条边u,v,w,将u和v转换成二进制后,u是v的前缀。给出q次询问,每次输入s,t,求s到t的最短距离。题解从题目数据而言,n为1e5,m为2e5,显然一般的多源最短路算法无法完成。考虑此题的特殊性质:由于边仅可能从u连向以u为前缀的v,那么若建立一颗以1为根的完......
  • P4707 重返现世 题解
    Description为了打开返回现世的大门,Yopilla需要制作开启大门的钥匙。Yopilla所在的迷失大陆有\(n\)种原料,只需要集齐任意\(k\)种,就可以开始制作。Yopilla来到了迷失大陆的核心地域。每个单位时间,这片地域就会随机生成一种原料。每种原料被生成的概率是不同的,第\(i\)种......