\(problem\)

给定一个包含n个顶点m条边的带权有向图,找一条边数最多的路径,且路径上的边的权值严格递增。

图中可能有重边和自环。

\(题意非常简单:n个点 m个带权边 最多能连成多少条边\)

\(看起来像搜索 就拿搜索水了一波\)

\(然后吧评测都卡爆了(而且只有9pts)\)

总是觉得好亏

\(打了一只前向星+DFS瞎搜\)(大雾)



\(~~恶心的DP题~~\)

\(9pts -> 0pts -> 64pts -> 73pts - >91pts ->100pts\)



数据范围很大 显然\(O(N)\) \(or\) $O(M) $

这题用搜索可以达到 \(O(N*玄学)\) 玄学 = 一次搜索时间 >\(如果带上记忆化 应该快点\)

\(那么DP的解法是O(M)的 每条边跑一次 记录一次\)

重点 ->“递增”

首先 要按权值给边排序

\(所以 应该注重权值相同的边\)

\(if(i < m and edge[i].dis == edge[i+1].dis) continue ;\)

\(加不加等于都没有关系 因为初始值是0\)

\(权值相同就直接跳过 否则会Wrong Answer\)

\(这是特判权值相同的边\)

cnt数组用来储存边权相同的情况

这句\(cnt[edge[k].to] = max ( cnt[edge[k].to] , dp[edge[k].from] + 1 ) ;\) 不要手欠把dp和cnt打错 否则喜提WA数量不等(滑稽

还有一句话 \(十年OI一场空 不开LL见祖宗orz\)

实测int WA了一个点


\(code\)

#include <bits/stdc++.h>
using namespace std;
typedef long long LL ;
inline LL In() { LL res(0),f(1); register char c = getchar() ;
while(!isdigit(c)) { if(c == '-') f = -1 ; c = getchar() ; }
while(isdigit(c)) res = (res << 1) + (res << 3) + (c & 15) , c = getchar() ; return res * f ;
}
int n , m ;
const int N = 300000 ;
struct node{
int from ;
int to ;
int dis ;
}edge[N] ;
LL cnt[N] ;
LL dp[N] ;
bool cmp(node x,node y) { return x.dis < y.dis ; }
signed main() {
memset(edge,0,sizeof(edge)) ; memset(dp,0,sizeof(dp)) ;
n = In() ; m = In() ;
for(register int i =1 ; i <= m ; i ++) {//读入
int u = In() , v = In() , w = In() ;
edge[i] = (node){u,v,w} ;
}
sort(edge+1 , edge+m+1 , cmp) ;//排序
int pos = 1 ;
for(register int i = 1 ;i <= m ;i ++) {//DP
if(i < m and edge[i].dis == edge[i+1].dis) continue ;//特判权值相同
for(register int k = pos ; k <= i ; k ++) cnt[edge[k].to] = max ( cnt[edge[k].to] , dp[edge[k].from] + 1 ) ;
for(register int k = pos ; k <= i ; k ++) dp[edge[k].to] = cnt[edge[k].to] ;
pos = i + 1 ;
}
cout << * max_element( dp + 1 , dp + n + 1 ) << endl ;//最大值函数
return 0;
}

随机推荐

  1. 使用wepy 小程序授权点击取消授权失败的方案

    在wepy里使用进行小程序页面授权,里面包含了用户点击取消的重新授权方案: //auth.js /* * @Author: Porco_Mar * @Date: 2018-04-11 15:49:55 ...

  2. HTML5/CSS3简易版俄罗斯方块游戏

    在线演示 本地下载

  3. 金色酒类企业dedecms模板

    金色酒类企业dedecms模板,网站模板,dedecms模板. 模板地址:http://www.huiyi8.com/sc/7276.html

  4. Android Studio 代码混淆(你真的会混淆吗)

    一.前言 今天要打包新产品,突然忘了混淆的参数是怎么写的了,虽然之前也混淆过,可是具体配置的参数代码有些记不起来了,因此决定花点时间写篇博客记录一下,方便以后查找和自己的记忆. 二.Android S ...

  5. LightOJ 1132 Summing up Powers:矩阵快速幂 + 二项式定理

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1132 题意: 给定n.k,求(1K + 2K + 3K + ... + NK) % 2 ...

  6. html5--2.6新的布局元素(5)-nav

    html5--2.6新的布局元素(4)-aside/nav 学习要点 了解aside/nav元素的语义和用法 通过实例理解aside/nav元素的用法 aside元素 aside元素通常用来设置侧边栏 ...

  7. kvm初体验之八:调整vm的vcpu, memory, disk大小

    假设host上创建的vm的名字为vm1. 1. 查看vm1的domain information [root@tanghuimin thm]# virsh dominfo vm1 Id: 10 Nam ...

  8. Java丨springMVC + Ajax 来进行分页

    javaweb 分页技术 实现的方式有很多种,但是小编在网上问了度娘也问了谷老师,得到的答案让小编我不是很满意,so,还是自己写吧! 在小编的博文中,小编不会上传源码,只会把重要的代码和思路供大家参考 ...

  9. 001-Bootstrap栅格系统

    1 安装和基本使用 外文官网 中文官网 可以正常下载使用 有三个文件夹, 分别是css, fonts, js bootstrap/ ├── css/ │ ├── bootstrap.css │ ├── ...

  10. linux 进程学习笔记-进程退出/终止进程

    <!--[if !supportLists]-->Ÿ <!--[endif]-->退出/终止进程 void _exit(int status) 与 void exit(int ...