博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 P1137 旅行计划
阅读量:5124 次
发布时间:2019-06-13

本文共 1097 字,大约阅读时间需要 3 分钟。

先进行拓扑排序得到拓扑序

之后按拓扑序dp求最大值

#include
#include
using namespace std;const int MAX=100005;int n,m,cnt;int head[MAX],top[MAX],sta[MAX],ans[MAX],du[MAX];struct edg{ int to,next;}edge[MAX*2];void add(int x,int y){ edge[++cnt].next=head[x]; edge[cnt].to=y; head[x]=cnt;}void tpsort(){
//拓扑排序 top即拓扑序 int tot=0,hea=1,tai=0; for(int i=1;i<=n;i++) if(!du[i]) sta[++tai]=top[++tot]=i; while(hea<=tai){ int u=sta[hea]; for(int i=head[u];i;i=edge[i].next){ int v=edge[i].to; du[v]--; if(!du[v]) sta[++tai]=top[++tot]=v; } hea++; }}int main(){ scanf("%d %d",&n,&m); for(int i=1;i<=m;i++){ int a,b; scanf("%d %d",&a,&b); add(a,b); du[b]++; } tpsort(); for(int i=1;i<=n;i++){ int u=top[i]; for(int j=head[u];j;j=edge[j].next){ int v=edge[j].to; ans[v]=max(ans[u]+1,ans[v]);//简单dp } } for(int i=1;i<=n;i++) printf("%d\n",ans[i]+1); return 0;}

转载于:https://www.cnblogs.com/Menteur-Hxy/p/9248049.html

你可能感兴趣的文章
easyui(一) 初始easyui
查看>>
python 字符串format使用
查看>>
python练习题-day25
查看>>
Canvas应用绚烂效果-creatjs实现
查看>>
某简单易懂的人脸识别 API 的开发环境搭建和简易教程
查看>>
第四周JAVA作业
查看>>
为自己尝试写点东西吧,程序员们!(转)
查看>>
微软的转型中?
查看>>
创建测试数据
查看>>
sqlite3使用简介(内含解决sqlite内存的方法)
查看>>
james-2.3.2中的配置
查看>>
浅谈高斯消元的实现和简单应用
查看>>
2017书单3
查看>>
C#中的interface
查看>>
ASP.NET MVC的路由
查看>>
Flex AIR 文件对象操作
查看>>
Oracle 数据库中对记录进行分页处理
查看>>
后台开发常用mysql语句_v1.0
查看>>
linux curl命令验证服务器断点续传支持
查看>>
JS数组遍历
查看>>