博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51Nod 1274 - 最长递增路径(DP)
阅读量:4691 次
发布时间:2019-06-09

本文共 893 字,大约阅读时间需要 2 分钟。

【题目描述】

在这里插入图片描述
【思路】
如果是有向图,那么可以把边按照从小到大排序,然后设 dp[i]dp[i]dp[i]iii 为终点的最长距离。有 dp[u]=max{dp[u],dp[v]+1∣(u,v)∈E}dp[u]=max\{dp[u],dp[v]+1|(u,v)\in E\}dp[u]=max{
dp[u],dp[v]+
1(u,v)E}

而在无向图中,对于无向边 (u,v)(u,v)(u,v)

dp[u]=max{dp[u],dp[v]+1}dp[u]=max\{dp[u],dp[v]+1\}dp[u]=max{
dp[u],dp[v]+
1}
dp[v]=max{dp[v],dp[u]+1}dp[v]=max\{dp[v],dp[u]+1\}dp[v]=max{
dp[v],dp[u]+
1}
因为 dpdpdp 是一个数组,两个状态转移方程的先后顺序会有所影响。
所以另外用一个数组 tmptmptmptmp[i]tmp[i]tmp[i] 记录上一次更新后时候的 dp[i]dp[i]dp[i]
那么就有:
dp[u]=max{dp[u],tmp[v]+1}dp[u]=max\{dp[u],tmp[v]+1\}dp[u]=max{
dp[u],tmp[v]+
1}
dp[v]=max{dp[v],tmp[u]+1}dp[v]=max\{dp[v],tmp[u]+1\}dp[v]=max{
dp[v],tmp[u]+
1}
对边权升序排序,对于每一种权值进行统一处理

#include
using namespace std;const int maxn=50005;struct Edge{ int from,to,dist; Edge(int f=0,int t=0,int d=0):from(f),to(t),dist(d){} bool operator<(const Edge& e)const{ return dist

转载于:https://www.cnblogs.com/wafish/p/10465121.html

你可能感兴趣的文章
Git的使用
查看>>
Redis Python开发指南
查看>>
Photon——Adding Operations 添加操作
查看>>
4.如果给一个单位做相关的软件,你认为最重要的是需要得到谁的支持,为什么?...
查看>>
视图基本
查看>>
提高Java代码质量的Eclipse插件之Checkstyle的使用具体解释
查看>>
【莫比乌斯反演】——蒟蒻的理解
查看>>
JavaScript - try catch finally throw
查看>>
appium android实例
查看>>
flex手机项目嵌套html页面和html页面播放声音文件
查看>>
Day90
查看>>
ORM系列之二:EF(4) 约定、注释、Fluent API
查看>>
cnblogs latex公式
查看>>
js中的替换
查看>>
SKTextureAtlas类
查看>>
自己写的网页放在github里面
查看>>
关于Git的学习
查看>>
nginx proxy文件编写总结
查看>>
决策树应用
查看>>
LightOJ_1248 Dice (III)
查看>>