51nod 1274 最长递增路径(DP)
一开始自己想了一种跑的巨慢。。写了题解的做法又跑的巨快。。一脸懵逼
显然要求边权递增就不可能经过重复的边了,那么设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)相关推荐
- 矩阵中的最长递增路径
矩阵中的最长递增路径 文章目录 矩阵中的最长递增路径 一.问题描述 **方法一:朴素的深度优先搜索 [超时]** **方法二:记忆化深度优先搜索 [通过]** **方法三:动态规划** **方法四:广 ...
- Leetcode--329. 矩阵中的最长递增路径
给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums = [ ...
- java某个起点出发的最长路径_【leetcode-动态规划】矩阵中的最长递增路径
[leetcode-动态规划]矩阵中的最长递增路径 题目: 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即 ...
- 算法-------矩阵中的最长递增路径(Java版本)
题目 给定一个整数矩阵,找出最长递增路径的长度.对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕).示例 1:输入: nums = [[9,9 ...
- LeetCode_每日一题今日份_329.矩阵中的最长递增路径(没懂)
const int dirs[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; int rows, columns; //定义最终返回的最长递增路劲数组的行.列i ...
- 329. Longest Increasing Path in a Matrix 矩阵中的最长递增路径
给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums = [[9,9 ...
- leetcode329. 矩阵中的最长递增路径(dfs)
给定一个整数矩阵,找出最长递增路径的长度.对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕).示例 1:输入: nums = [[9,9,4] ...
- leetcode329. 矩阵中的最长递增路径
给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums = [ ...
- LeetCode 329. 矩阵中的最长递增路径(记忆化递归)
文章目录 1. 题目 2. 解题 2.1 记忆化递归 2.2 拓扑排序 1. 题目 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向 ...
最新文章
- vue 父页面中的方法 调用_解决Vue中页面成功渲染数据undefined的问题
- hsrp热备路由协议实验
- 支持Android4.0以下webp的使用
- 方差 标准差_方差与标准差——杭州市初中数学核心组寒假微课学习八年级第38课...
- CERC2017 Gambling Guide,最短路变形,期望dp
- IQKeyboardManager 在iOS11导航栏消失的问题
- html5 “拖放”
- chrome打开网址但是没有地址栏
- 微信小程序直播正式公测;刘强东 2020 年已卸任 8 家公司高管;React 16.13.0 发布| 极客头条...
- 米奇emoji_一些常用的 Emoji 符号(可直接复制)
- 社区发现(五)--BP(信念传播算法)
- flex布局——回顾
- pytorch cpu版本安装_小白学pytorch 01-安装C++/Python版本pytorch
- calibre怎么把HTML转换mobi,calibre:mobi格式转换成pdf格式 | 求索阁
- 基于 FPGA 的 UART 控制器设计(VHDL)(中)
- 学生用计算机计算分数,Excel案例(十三)——学生计算机成绩表
- CASIA-B步态数据集的一些粗糙理解
- C/C++编程学习 - 第5周 ⑤ 人见人爱A+B
- 第二十六篇 request模块使用
- 经营报表-FineReport配置Oracle外接数据库(2)
热门文章
- android RadioGroup中设置selector后出现多个别选中的RadioButton的解决办法
- Python面向对象的三大特征(封装、继承、多态)
- Python获取主机信息、开机时间和开机时长、当前登陆用户
- Python中的各种if语句(if条件判断、if...else、if...elif...else、if...else嵌套)
- 人眼定位python代码_使用dlib,OpenCV和Python进行人脸识别—人眼眨眼检测
- Paradigm此前投资Uniswap的资金价值或超30亿美元
- S.Finance已上线收益稳定币UU
- 数据:以太坊2.0存款合约新增9.4万ETH
- Axure企业官网通用模板web端+公司官网通用模板web端高保真原型+服务企业门户官网+加入我们+在线招聘+企业宣传+新闻动态+企业理念+产品与服务+公司通用版官方电脑端门户网站
- Python函数的参数