51Nod-1274-最长递增路径
来源:互联网 发布:淘宝下载ipad版5.1.1 编辑:程序博客网 时间:2024/06/05 11:20
ACM模版
描述
题解
图上 dp,由于要求严格递增,所以需要先对边权进行排序,保证每次添加边权都递增,但是这样并不能保证严格递增,存在相同长度的边时,我们需要记录下来一同处理,保证他们在添加时互不影响,这样就没什么问题了。
代码
#include <cstdio>#include <algorithm>using namespace std;const int MAXN = 5e4 + 10;struct edge{ int x, y, w;} Edge[MAXN];int N, M;int dp[MAXN];int temp[MAXN];bool cmp(edge a, edge b){ return a.w < b.w;}int main(){ scanf("%d%d", &N, &M); for (int i = 0; i < M; i++) { scanf("%d%d%d", &Edge[i].x, &Edge[i].y, &Edge[i].w); } sort(Edge, Edge + M, cmp); int last = -1; for (int i = 0; i < M; i++) { if (i == M - 1 || Edge[i].w < Edge[i + 1].w) { for (int j = last + 1; j <= i; j++) // 防止重复加入,拷贝副本 { temp[Edge[j].x] = dp[Edge[j].x]; temp[Edge[j].y] = dp[Edge[j].y]; } for (int j = last + 1; j <= i; j++) { dp[Edge[j].x] = max(dp[Edge[j].x], temp[Edge[j].y] + 1); dp[Edge[j].y] = max(dp[Edge[j].y], temp[Edge[j].x] + 1); } last = i; } } int ans = 0; for (int i = 0; i < N; i++) { ans = max(ans, dp[i]); } printf("%d\n",ans); return 0;}
0 0
- 51NOD 1274 最长递增路径
- 51nod-1274 最长递增路径
- 51nod 1274 最长递增路径【dp】
- 51nod 1274 最长递增路径
- 51Nod-1274-最长递增路径
- 51nod 1274 最长递增路径(dp)
- 【DP】51Nod 1274 最长递增路径
- 51nod 1274 最长递增路径【DP】
- 51nod 1274 最长递增路径[dp]
- 51nod 1274 最长递增路径(图上的dp)
- [DP] 51 Nod 1274——最长递增路径
- Lcs最长递增 51nod
- [51nod1274]最长递增路径
- 【51Nod1274】最长递增路径
- 51nod 1134 最长递增子序列
- 51nod 1134 最长递增子序列
- 51nod 1134 最长递增子序列
- [51nod]1134 最长递增子序列
- c语言中的左结合右结合
- leetcode--485. Max Consecutive Ones
- 网络工程师考试复习心得(附详细电子笔记)
- java邮件开发--电子邮件基础
- YUV格式解析
- 51Nod-1274-最长递增路径
- java并发编程:线程安全性
- 应聘时最漂亮的回答
- 深度剖析空间配置器(二)一二级配置器
- Android Fragment的使用 八 ListFragment
- 浏览器的渲染机制
- 修改identity语句
- eclipse备忘录
- 开门测试