旅行计划

luogu 1137

题目大意:

有一堆点,之间连接着一些边(有向),保证无环,现在要求出从任意地方出发到所有点的最长路(出发点不一定相同)

原题:

题目描述

小明要去一个国家旅游。这个国家有#NNN个城市,编号为111至NNN,并且有MMM条道路连接着,小明准备从其中一个城市出发,并只往东走到城市iii停止。
所以他就需要选择最先到达的城市,并制定一条路线以城市iii为终点,使得线路上除了第一个城市,每个城市都在路线前一个城市东面,并且满足这个前提下还希望游览的城市尽量多。
现在,你只知道每一条道路所连接的两个城市的相对位置关系,但并不知道所有城市具体的位置。现在对于所有的iii,都需要你为小明制定一条路线,并求出以城市iii为终点最多能够游览多少个城市。

输入输出格式

输入格式:

第111行为两个正整数N,MN, MN,M。
接下来MMM行,每行两个正整数x,yx, yx,y,表示了有一条连接城市xxx与城市yyy的道路,保证了城市xxx在城市yyy西面。

输出格式:

NNN行,第iii行包含一个正整数,表示以第iii个城市为终点最多能游览多少个城市。

输入输出样例

输入样例#1:

5 6
1 2
1 3
2 3
2 4
3 4
2 5

输出样例#1:

1
2
3
4
3

说明

均选择从城市111出发可以得到以上答案。
对于20%20\%20%的数据,N≤100N ≤ 100N≤100;
对于60%60\%60%的数据,N≤1000N ≤ 1000N≤1000;
对于100%100\%100%的数据,N≤100000,M≤200000N ≤ 100000,M ≤ 200000N≤100000,M≤200000。

解题思路:

用拓扑排序跑一便,顺便DP就可以了

代码(邻接表+手动队列):

#include<cstdio>
#define max(a,b) (a)>(b)?(a):(b)
using namespace std;
int n,m,x,y,h,w,t,tot,rd[100005],b[100005],head[100005],d[100005];
struct rec
{int to,next;
}a[200005];
void topsort()
{for (int i=1;i<=n;++i)if (!rd[i])d[++w]=i,b[i]=1;//入度为0t=1;while(t<=w){h=d[t];++t;for (int i=head[h];i;i=a[i].next){b[a[i].to]=max(b[a[i].to],b[h]+1);//DPrd[a[i].to]--;//入读减一if (!rd[a[i].to])d[++w]=a[i].to;//入队}}
}
int main()
{scanf("%d %d",&n,&m);for (int i=1;i<=m;++i){scanf("%d %d",&x,&y);a[++tot].to=y;a[tot].next=head[x];head[x]=tot;//连接rd[y]++;//入度加一}topsort();for (int i=1;i<=n;++i)printf("%d\n",b[i]);//输出
} 

代码(邻接表+STL队列):

#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n,m,x,y,h,tot,rd[100005],b[100005],head[100005];
struct rec
{int to,next;
}a[200005];
void topsort()
{queue<int>d;for (int i=1;i<=n;++i)if (!rd[i])d.push(i),b[i]=1;//入度为0while(!d.empty()){h=d.front();d.pop();for (int i=head[h];i;i=a[i].next){b[a[i].to]=max(b[a[i].to],b[h]+1);//DPrd[a[i].to]--;//入读减一if (!rd[a[i].to])d.push(a[i].to);//入队}}
}
int main()
{scanf("%d %d",&n,&m);for (int i=1;i<=m;++i){scanf("%d %d",&x,&y);a[++tot].to=y;a[tot].next=head[x];head[x]=tot;//连接rd[y]++;//入度加一}topsort();for (int i=1;i<=n;++i)printf("%d\n",b[i]);//输出
}

【拓扑排序】【DP】旅行计划(luogu 1137)相关推荐

  1. [NOIP2017]逛公园 最短路+拓扑排序+dp

    题目描述 给出一张 $n$ 个点 $m$ 条边的有向图,边权为非负整数.求满足路径长度小于等于 $1$ 到 $n$ 最短路 $+k$ 的 $1$ 到 $n$ 的路径条数模 $p$ ,如果有无数条则输出 ...

  2. 【BZOJ-1194】潘多拉的盒子 拓扑排序 + DP

    1194: [HNOI2006]潘多拉的盒子 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 456  Solved: 215 [Submit][St ...

  3. Wannafly挑战赛22 B 字符路径 ( 拓扑排序+dp )

    链接:https://ac.nowcoder.com/acm/contest/160/B 来源:牛客网 题目描述 给一个含n个点m条边的有向无环图(允许重边,点用1到n的整数表示),每条边上有一个字符 ...

  4. [多校联考-西南大学附中]切面包(线段树/概率与期望)+ Slow Path Finding Algorithm(拓扑排序/DP)+ 分数转化(数论)

    文章目录 T1:分数转换 题目 题解 代码实现 T2:Slow Path Finding Algorithm 题目 题解 代码实现 T3:切面包 题目 题解 代码实现 T1:分数转换 题目 Time ...

  5. P7077-函数调用【拓扑排序,dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P7077 题目大意 有一些函数分为三种 让一个位置的数加上一个数 让所有数乘上一个数 按顺序执行一些函数 然后不会有 ...

  6. 【UVA 437】The Tower of Babylon(拓扑排序+DP,做法)

    [Solution] 接上一篇,在处理有向无环图的最长链问题的时候,可以在做拓扑排序的同时,一边做DP; 设f[i]表示第i个方块作为最上面的最高值; f[y]=max(f[y],f[x]+h[y]) ...

  7. [jzoj 4246] 【五校联考6day2】san {spfa+dfs/spfa+拓扑排序+dp}

    题目 Description 小明经常去N 个地点,其中有些地点之间有直接的无向道路(共M 条这样的道路),可以直接互相到达,这些道路的长短不一.由于小明对这些道路都很熟悉,无论起点和终点在哪里,总能 ...

  8. 【拓扑排序+dp】Hzy's Rabbit Candy

    Hzy's Rabbit Candy 题目描述 Hzy和她的m只兔兔在一个n个点m条边的有向无环图上玩. 为了让兔兔们开心,Hzy带了一些糖.Hzy可以从任何一个点开始,走到任何一个点结束.在这途中, ...

  9. P1983 [NOIP2013 普及组] 车站分级——拓扑排序+dp

    [NOIP2013 普及组] 车站分级 题目描述 一条单向的铁路线上,依次有编号为 $1, 2, -, n $的 $n $个火车站.每个火车站都有一个级别,最低为 111 级.现有若干趟车次在这条线路 ...

  10. [拓扑排序][DP][Tarjan][并查集]JZOJ 4253 QYQ在艾泽拉斯

    Description 在艾泽拉斯的无尽之海里,有着一群不为人知的由各个种族的冒险者统治的岛屿,这些岛屿都很庞大,足以在上面建造许多的城市,城市之间有一些单向道路连接. 有一天,QYQ无意中发现了这些 ...

最新文章

  1. anaconda怎么使用编写python_怎样使用anaconda编辑python
  2. 对比2个表mailbox_id字段的差集,然后做插入操作
  3. Java 网络 socket 编程
  4. Hadoop Yarn配置参数整理(非常全面)
  5. 在Spring boot 配置过滤器(filter)
  6. python 编辑数学公式_Jupyter快速编辑高大上数学公式 泰勒展开式
  7. 在EditPlus中配置PHP调试
  8. C++对象模型3--无重写的单继承
  9. sql server 2005 T-SQL BEGIN DIALOG CONVERSATION (Transact-SQL)
  10. [220221] Majority Element
  11. 通过phoenix导入数据到hbase出错记录
  12. LabView2018的安装
  13. File类和时间类的两道综合练习
  14. 【BZOJ1855】[Scoi2010] 股票交易
  15. char 类型的取值范围
  16. K8s之DashBoard
  17. 迈高图手机版_迈高图地图下载
  18. 它是三大历史文献之一,明明价值连城,却被当做一堆废纸
  19. ipp协议 打印机 c语言,使用IPP(Internet打印协议)或LPR(行式打印机远程)在android中打印文件...
  20. [Kerberos基础]-- kdc集群主从搭建(kerberos相关)

热门文章

  1. 双路服务器只显示一半内存,双路服务器只显示一半内存
  2. 算法题目——读书知识点统计问题(POJ-3320)(尺取法)
  3. c++的文件输入/输出
  4. linux如何使用vnc远程登录,如何使用Xmanager及VNC登录远程桌面
  5. 深圳店匠笔试题-4.01
  6. Pytorch中的 torch.Tensor() 和 torch.tensor() 的区别
  7. pip 设置超时时间_Python pip使用超时问题解决方案
  8. SpringCloud Alibaba 框架下公司架构图
  9. 2019-02-26-算法-进化(回文数)
  10. Problem M. Mediocre String Problem(Z 函数 + PAM)