https://www.luogu.org/problemnew/show/P1434

有向图的最长链怎么求?有环肯定不行,这里保证无环。(否则应该使用toposort先求出所有不带环的位置)

设dp[u]=以u点开始的最长链的长度,那么以u为子节点的v就有dp[v]=max(dp[v],dp[u]+1),遍历其每个子节点就可以得知其最长链。

所以最简单的方法其实是记忆化搜索。

第一次完全手写前向星版本的dfs。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4.  
  5. int g[][];
  6.  
  7. int head[];
  8. struct Edge{
  9. int v,nxt;
  10. Edge(int v=,int nxt=):v(v),nxt(nxt){}
  11. }edge[*];
  12.  
  13. int indeg[];
  14. int etop=;
  15. void addedge(int u,int v){
  16. edge[etop].v=v;
  17. edge[etop].nxt=head[u];
  18. indeg[v]++;
  19. head[u]=etop++;
  20. }
  21.  
  22. int n,m;
  23.  
  24. int dp[];
  25. int dfs(int id){
  26. if(dp[id]!=-)
  27. return dp[id];
  28. else{
  29. int res=;
  30. for(int i=head[id];i!=-;i=edge[i].nxt){
  31. res=max(res,dfs(edge[i].v));
  32. }
  33. res++;
  34. return dp[id]=res;
  35. }
  36. }
  37.  
  38. int main(){
  39. scanf("%d%d",&n,&m);
  40. memset(g,0x3f,sizeof(g));
  41. memset(head,-,sizeof(head));
  42. memset(dp,-,sizeof(dp));
  43. for(int i=;i<=n;i++){
  44. for(int j=;j<=m;j++){
  45. scanf("%d",&g[i][j]);
  46. }
  47. }
  48.  
  49. for(int i=;i<=n;i++){
  50. for(int j=;j<=m;j++){
  51. if(g[i][j]>g[i-][j]){
  52. addedge((i-)*m+j,(i-)*m+j);
  53. }
  54. if(g[i][j]>g[i+][j]){
  55. addedge((i-)*m+j,(i)*m+j);
  56. }
  57. if(g[i][j]>g[i][j-]){
  58. addedge((i-)*m+j,(i-)*m+j-);
  59. }
  60. if(g[i][j]>g[i][j+]){
  61. addedge((i-)*m+j,(i-)*m+j+);
  62. }
  63. }
  64. }
  65.  
  66. int ans=;
  67. for(int i=;i<=n;i++){
  68. for(int j=;j<=m;j++){
  69. if(indeg[(i-)*m+j]==){
  70. ans=max(ans,dfs((i-)*m+j));
  71. }
  72. }
  73. }
  74.  
  75. printf("%d\n",ans);
  76.  
  77. }

洛谷 - P1434 - 滑雪 - 有向图最长链的更多相关文章

  1. 洛谷比赛 U5442 买(最长链)

    U5442 买 题目提供者bqsgwys 标签 树形结构 树的遍历 洛谷原创 题目背景 小E是个可爱的电路编码员. 题目描述 一天小E又要准备做电路了,他准备了一个电路板,上面有很多个电路元器件要安装 ...

  2. 洛谷P1434滑雪讲解

    题源:[戳这里] 洛谷博客链接:[戳这里] 我觉得这道题主要方法应该有两种: 动态规划 搜索 下面会分别对这两种方法进行简述 一,动态规划法首先的想法是用L(i,j)表示从点(i,j)出发能到达的最长 ...

  3. 洛谷 p1434 滑雪【记忆化搜索】

    <题目链接> Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...

  4. 洛谷P1434 滑雪【记忆化搜索】

    题目:https://www.luogu.org/problemnew/show/P1434 题意: 给一个矩阵,矩阵中的数字代表海拔高度. 现在要找一条最长路径,使得路径上的海拔是递减的. 思路: ...

  5. 洛谷P1434 滑雪

    题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在一个区域中最长 ...

  6. 洛谷 P1434 滑雪

    题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在一个区域中最长 ...

  7. 洛谷—— P1434 滑雪

    https://www.luogu.org/problem/show?pid=1434#sub 题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜 ...

  8. 洛谷P1434滑雪题解及记忆化搜索的基本步骤

    题目 滑雪是一道dp及记忆化搜索的经典题目. 所谓记忆化搜索便是在搜索的过程中边记录边搜索的一个算法. 当下次搜到这里时,便直接使用. 而且记忆化搜索一定要满足无后效性,为什么呢,因为如果不满足无后效 ...

  9. 洛谷 P3384 【模板】树链剖分-树链剖分(点权)(路径节点更新、路径求和、子树节点更新、子树求和)模板-备注结合一下以前写的题目,懒得写很详细的注释

    P3384 [模板]树链剖分 题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节 ...

随机推荐

  1. 把握linux内核设计思想(十二):内存管理之slab分配器

    [版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流.请勿用于商业用途] 上一节最后说到对于小内存区的请求,假设採用伙伴系统来进行分配,则会在页内产生非 ...

  2. HDU2897( 巴什博奕变形)

    邂逅明下 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...

  3. 如何正确地在React中处理事件

    1.构造器内绑定this class MyComponent extends React.Component { constructor(props) { super(props); this.sta ...

  4. postgres源码目录结构

    1.第一级目录介绍 |_postgres |_aclocal.m4------------config用的文件的一部分 |_config----------------config文件目录 |_con ...

  5. hadoop eclipse插件生成

    hadoop eclipse插件生成 做了一年的hadoop开发.还没有自动生成过eclipse插件,一直都是在网上下载别人的用,今天有时间,就把这段遗憾补回来,自己生成一下,废话不说,開始了. 本文 ...

  6. python day-15 匿名函数 sorted ()函数 filter()函数 map()函数 递归 二分法

    一.匿名函数 匿名函数的结构:变量   =  lamda  参数: 返回值 a  =  lamda  x : x*x       # x为参数,   : 后边的为函数体 print(a(x)) def ...

  7. TCP客户服务端

    创建TCP服务端1.创建一个ServerSocket对象.2.调用accept()方法接收客户端请求.3.从Socket中获取I/O流.4.对I/O流进行读写操作,完成与客户端的交互.5.关闭I/O流 ...

  8. LightOJ - 1422 Halloween Costumes —— 区间DP

    题目链接:https://vjudge.net/problem/LightOJ-1422 1422 - Halloween Costumes    PDF (English) Statistics F ...

  9. POJ3087 Shuffle'm Up —— 打表找规律 / map判重

    题目链接:http://poj.org/problem?id=3087 Shuffle'm Up Time Limit: 1000MS   Memory Limit: 65536K Total Sub ...

  10. Redis持久化(RDB和AOF)

    什么是Redis持久化 什么是Redis持久化,就是将内存数据保存到硬盘. Redis 持久化存储 (AOF 与 RDB 两种模式) RDB持久化 RDB 是以二进制文件,是在某个时间 点将数据写入一 ...