一开始自己想了一种跑的巨慢。。写了题解的做法又跑的巨快。。一脸懵逼

  显然要求边权递增就不可能经过重复的边了,那么设f[i]为第i条边出发能走多远就好了,这是我一开始的写法,可能dfs冗余状态较多,跑的极慢

#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cmath>
#include<map>
#define ll long long
using namespace std;
const int maxn=500010,inf=1e9;
struct poi{int too,dis,pre;}e[maxn];
int n,m,x,y,z,tot,ans;
int last[maxn],dp[maxn];
void read(int &k)
{int f=1;k=0;char c=getchar();while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();while(c<='9'&&c>='0')k=k*10+c-'0',c=getchar();k*=f;
}
void add(int x,int y,int z){e[++tot].too=y;e[tot].dis=z;e[tot].pre=last[x];last[x]=tot;}
int dfs(int x,int fa)
{if(dp[x])return dp[x];dp[x]=1;for(int i=last[e[x].too];i;i=e[i].pre)if(i!=fa&&e[i].dis>e[x].dis)dfs(i,x),dp[x]=max(dp[x],dp[i]+1);return dp[x];
}
int main()
{read(n);read(m);for(int i=1;i<=m;i++)read(x),read(y),read(z),add(x,y,z),add(y,x,z);for(int i=1;i<=tot;i++)if(!dp[i])dfs(i,0);for(int i=1;i<=tot;i++)ans=max(ans,dp[i]);printf("%d\n",ans);return 0;
}

View Code

  题解的做法是按照边权排序,然后就可以用点来转移了...

  (然后就踩在yyl头上了

#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cmath>
#include<map>
#define ll long long
using namespace std;
const int maxn=500010,inf=1e9;
struct poi{int x,too,dis;}e[maxn];
int n,m,x,y,z,ans,last;
int g[maxn],f[maxn];
void read(int &k)
{int f=1;k=0;char c=getchar();while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();while(c<='9'&&c>='0')k=k*10+c-'0',c=getchar();k*=f;
}
bool cmp(poi a,poi b){return a.dis<b.dis;}
int main()
{read(n);read(m);for(int i=1;i<=m;i++)read(x),read(y),read(z),e[i].x=x,e[i].too=y,e[i].dis=z;sort(e+1,e+1+m,cmp);last=1;for(int i=1;i<=m;i++)if(i==m||e[i].dis<e[i+1].dis){for(int j=last;j<=i;j++)g[e[j].too]=f[e[j].too],g[e[j].x]=f[e[j].x];for(int j=last;j<=i;j++)f[e[j].too]=max(f[e[j].too],g[e[j].x]+1),f[e[j].x]=max(f[e[j].x],g[e[j].too]+1);last=i+1;}for(int i=0;i<n;i++)ans=max(ans,f[i]);printf("%d\n",ans);return 0;
}

View Code

转载于:https://www.cnblogs.com/Sakits/p/7396184.html

51nod 1274 最长递增路径(DP)相关推荐

  1. 矩阵中的最长递增路径

    矩阵中的最长递增路径 文章目录 矩阵中的最长递增路径 一.问题描述 **方法一:朴素的深度优先搜索 [超时]** **方法二:记忆化深度优先搜索 [通过]** **方法三:动态规划** **方法四:广 ...

  2. Leetcode--329. 矩阵中的最长递增路径

    给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums =  [   ...

  3. java某个起点出发的最长路径_【leetcode-动态规划】矩阵中的最长递增路径

    [leetcode-动态规划]矩阵中的最长递增路径 题目: 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即 ...

  4. 算法-------矩阵中的最长递增路径(Java版本)

    题目 给定一个整数矩阵,找出最长递增路径的长度.对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕).示例 1:输入: nums = [[9,9 ...

  5. LeetCode_每日一题今日份_329.矩阵中的最长递增路径(没懂)

    const int dirs[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; int rows, columns; //定义最终返回的最长递增路劲数组的行.列i ...

  6. 329. Longest Increasing Path in a Matrix 矩阵中的最长递增路径

    给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums = [[9,9 ...

  7. leetcode329. 矩阵中的最长递增路径(dfs)

    给定一个整数矩阵,找出最长递增路径的长度.对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕).示例 1:输入: nums = [[9,9,4] ...

  8. leetcode329. 矩阵中的最长递增路径

    给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums =  [   ...

  9. LeetCode 329. 矩阵中的最长递增路径(记忆化递归)

    文章目录 1. 题目 2. 解题 2.1 记忆化递归 2.2 拓扑排序 1. 题目 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向 ...

最新文章

  1. vue 父页面中的方法 调用_解决Vue中页面成功渲染数据undefined的问题
  2. hsrp热备路由协议实验
  3. 支持Android4.0以下webp的使用
  4. 方差 标准差_方差与标准差——杭州市初中数学核心组寒假微课学习八年级第38课...
  5. CERC2017 Gambling Guide,最短路变形,期望dp
  6. IQKeyboardManager 在iOS11导航栏消失的问题
  7. html5 “拖放”
  8. chrome打开网址但是没有地址栏
  9. 微信小程序直播正式公测;刘强东 2020 年已卸任 8 家公司高管;React 16.13.0 发布| 极客头条...
  10. 米奇emoji_一些常用的 Emoji 符号(可直接复制)
  11. 社区发现(五)--BP(信念传播算法)
  12. flex布局——回顾
  13. pytorch cpu版本安装_小白学pytorch 01-安装C++/Python版本pytorch
  14. calibre怎么把HTML转换mobi,calibre:mobi格式转换成pdf格式 | 求索阁
  15. 基于 FPGA 的 UART 控制器设计(VHDL)(中)
  16. 学生用计算机计算分数,Excel案例(十三)——学生计算机成绩表
  17. CASIA-B步态数据集的一些粗糙理解
  18. C/C++编程学习 - 第5周 ⑤ 人见人爱A+B
  19. 第二十六篇 request模块使用
  20. 经营报表-FineReport配置Oracle外接数据库(2)

热门文章

  1. android RadioGroup中设置selector后出现多个别选中的RadioButton的解决办法
  2. Python面向对象的三大特征(封装、继承、多态)
  3. Python获取主机信息、开机时间和开机时长、当前登陆用户
  4. Python中的各种if语句(if条件判断、if...else、if...elif...else、if...else嵌套)
  5. 人眼定位python代码_使用dlib,OpenCV和Python进行人脸识别—人眼眨眼检测
  6. Paradigm此前投资Uniswap的资金价值或超30亿美元
  7. S.Finance已上线收益稳定币UU
  8. 数据:以太坊2.0存款合约新增9.4万ETH
  9. Axure企业官网通用模板web端+公司官网通用模板web端高保真原型+服务企业门户官网+加入我们+在线招聘+企业宣传+新闻动态+企业理念+产品与服务+公司通用版官方电脑端门户网站
  10. Python函数的参数