博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces 459E E. Pashmak and Graph(dp)
阅读量:3711 次
发布时间:2019-05-21

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

题目链接:


题目大意:

给出n个点,m条边的有向图,每个边有边权,求一条最长的边权上升的路径的长度。


题目分析:

  • 定义dp[i]表示第i条边结尾的情况下的最长路径。
  • 定义g[i]表示点i结尾的情况的最长路径。
  • 对所有的边进行排序,那么前面的边只可能小于等于后面的边。
  • 所以dp[i] = g[e[i].u]+1
  • 然后只需要特殊考虑一下边相等的情况,更新g[i]即可,具体见代码。

AC代码:

#include 
#include
#include
#include
#define MAX 300007using namespace std;int n,m;int dp[MAX],g[MAX];struct Edge{ int u,v,w; bool operator < ( const Edge& a ) const { return w < a.w; }}e[MAX];int main ( ){ while ( ~scanf ( "%d%d" , &n , &m ) ) { for ( int i = 0 ; i < m ; i++ ) scanf ( "%d%d%d" , &e[i].u , &e[i].v , &e[i].w ); sort ( e , e+m ); int t = 0; e[m].w = -1; int ans = 0; for ( int i = 0 ; i < m ; i++ ) { int v = e[i].v; int u = e[i].u; int w = e[i].w; dp[i] = g[e[i].u]+1; if ( e[i].w != e[i+1].w ) { for ( int j = t ; j <= i ; j++ ) g[e[j].v] = max ( g[e[j].v] , dp[j] ); t = i+1; } ans = max ( ans , dp[i] ); } printf ( "%d\n" , ans ); }}

转载地址:http://lqvjn.baihongyu.com/

你可能感兴趣的文章
头文件的建立
查看>>
STM32—常用的几种伪指令宏
查看>>
STM32—位带操作
查看>>
Keil5中出现中文乱码的解决方法
查看>>
【写一个操作系统】1—hello world重出江湖
查看>>
【写一个操作系统】2—VMware创建软盘映像
查看>>
STM32—SPI读写FLASH
查看>>
【写一个操作系统】3—汇编语言学习及Makefile入门
查看>>
const关键字用法
查看>>
extern关键字用法
查看>>
红外遥控小车
查看>>
FTP(vsftp)服务器的搭建配置以及访问控制
查看>>
python实现的简单点对点(p2p)聊天
查看>>
nwjs node-webkit 桌面app自定义窗体事件 nwjs托盘tray的实现
查看>>
后端使用pyecharts画图并输出为图片保存
查看>>
nodejs日志读取 日志查找 日志刷新
查看>>
GB2312汉字拼音对照表
查看>>
手机 用户界面和多媒体 版面有价值问题整理 j2medev com 0406更新
查看>>
SP 梦网masterSP模式下的sp生存
查看>>
dotNET ThreadPool 对象中没有足够的自由线程来完成操作 的现象和解决办法
查看>>