[DP] 51 Nod 1274——最长递增路径
来源:互联网 发布:影响因素分析模型知乎 编辑:程序博客网 时间:2024/06/04 18:39
题目描述
一个无向图,可能有自环,有重边,每条边有一个边权。你可以从任何点出发,任何点结束,可以经过同一个点任意次。但是不能经过同一条边2次,并且你走过的路必须满足所有边的权值严格单调递增,求最长能经过多少条边。
以此图为例,最长的路径是:
3 -> 1 -> 2 -> 3 -> 2 或
3 -> 1 -> 2 -> 3 -> 4 长度为4。
解题思路
很自然想到将边排序。
然后DP。
但是要注意边相同的情况。
#include<cstdio>#include<algorithm>using namespace std;const int maxn=50005;struct jz{ int x,y,z; bool operator<(const jz &b)const{return z<b.z;}}a[maxn];int n,m,f[maxn],lst[maxn],ans;int main(){ freopen("exam.in","r",stdin); freopen("exam.out","w",stdout); scanf("%d%d",&n,&m); for (int i=1;i<=m;i++) scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z),a[i].x++,a[i].y++; sort(a+1,a+1+m); int i=1; while(i<=m){ int j=i; while(j<=m&&a[i].z==a[j].z) j++; for (int k=i;k<j;k++) lst[a[k].x]=f[a[k].x],lst[a[k].y]=f[a[k].y]; for (int k=i;k<j;k++) f[a[k].x]=max(f[a[k].x],lst[a[k].y]+1), f[a[k].y]=max(f[a[k].y],lst[a[k].x]+1); i=j; } for (int i=1;i<=n;i++) ans=max(ans,f[i]); printf("%d\n",ans); return 0;}
阅读全文
0 0
- [DP] 51 Nod 1274——最长递增路径
- 51nod 1274 最长递增路径【dp】
- 51nod 1274 最长递增路径(dp)
- 【DP】51Nod 1274 最长递增路径
- 51nod 1274 最长递增路径【DP】
- 51nod 1274 最长递增路径[dp]
- 51nod 1274 最长递增路径(图上的dp)
- 51NOD 1274 最长递增路径
- 51nod-1274 最长递增路径
- 51nod 1274 最长递增路径
- 51Nod-1274-最长递增路径
- 51NOd 1134 最长递增子序列(dp)
- 51nod 1134 最长递增子序列(dp)
- 51nod 1134 最长递增子序列 dp(经典)
- 51nod 1218 最长递增子序列 V2 [dp]
- 51nod 1134 最长递增子序列 DP
- Lcs最长递增 51nod
- 最长公共子序列 + 记录路径 ( 51 NOD DP 教程 )
- ChainMap用法
- 进制转换,运算符,类型转换,
- Python学习笔记(十二)
- android 内存泄露分析
- Activity生命周期(上)
- [DP] 51 Nod 1274——最长递增路径
- SQLserver 记事本
- phpStudy+XDebug配置
- js中substr()和substring()的区别
- 科技盛宴---记2017云栖大会(杭州)
- node.js安装使用
- C/C++中产生随机数(rand,srand用法)
- Python学习笔记(十三)
- python---实战4统计特定时间中特定信息次数(替换、次数、列表、排序、元组)待完善