【题目】F. Pathwalks

【题意】给定n个点m条边的有向图,可能不连通有重边有自环。每条边有编号 i 和边权 wi ,求最长的路径(可以经过重复节点)满足编号和边权都严格递增。n,m,wi<=10^5。

【算法】主席树+DP

【题解】这个和LIS十分类似,只要在考虑LIS的树状数组做法的前提下多考虑节点搭配问题,即f[i]=f[j]+1还需要e[j].v=e[i].u。

所以对每个节点建可持久化线段树,然后DP即可。(当然也可以用可持久化树状数组)

复杂度O(n log n)。

#include<cstdio>
#include<algorithm>
#define lowbit(x) (x&-x)
using namespace std;
const int maxn=100010;
int n,m,f[maxn],rt[maxn],sz;
struct tree{int l,r,mx;}t[maxn*20];
void insert(int& k,int l,int r,int x,int y){if(!k)k=++sz;t[k].mx=max(t[k].mx,y);if(l==r)return;int mid=(l+r)>>1;if(x<=mid)insert(t[k].l,l,mid,x,y);else insert(t[k].r,mid+1,r,x,y);
}
int query(int k,int l,int r,int x){if(l==r)return t[k].mx;int mid=(l+r)>>1;if(x<=mid)return query(t[k].l,l,mid,x);else return max(t[t[k].l].mx,query(t[k].r,mid+1,r,x));
}
int main(){scanf("%d%d",&n,&m);int ans=0;for(int i=1;i<=m;i++){int u,v,w;scanf("%d%d%d",&u,&v,&w);f[i]=query(rt[u],1,100000,w-1)+1;insert(rt[v],1,100000,w,f[i]);ans=max(ans,f[i]);}printf("%d",ans);return 0;}

View Code

转载于:https://www.cnblogs.com/onioncyc/p/8744105.html

【CodeForces】960 F. Pathwalks 主席树+动态规划相关推荐

  1. CodeForces - 1422F Boring Queries(主席树+线段树/RMQ)

    题目链接:点击查看 题目大意:给出 n 个数组成的数组 a ,再给出 m 次询问,每次询问需要回答区间 [ l , r ] 中所有元素的最小公倍数,强制在线 题目分析:首先考虑多个数的最小公倍数该如何 ...

  2. CodeForces - 813E Army Creation(主席树+思维)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列和一个整数 kkk,现在有 qqq 次询问,每次询问给出一个区间 [l,r][l,r][l,r],设 cnticnt_icnti​ 为数字 ...

  3. Codeforces Round #675 (Div. 2) F. Boring Queries 区间lcm + 主席树

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的序列aaa,qqq个询问,每次询问[l,r][l,r][l,r]内的lcmlcmlcm是多少,对1e9+71e9+71e9+7取模. n ...

  4. F. Strange Array(Codeforces Round #727 (Div. 2))(主席树)

    F. Strange Array 给定一个长度为nnn的数组aaa,1≤ai≤n1 \leq a_i \leq n1≤ai​≤n,对于每个aia_iai​,我们要找到一个l≤i,r≥il \leq i ...

  5. 主席树 + 树上倍增 ---- codeforces 587C[树上倍增或者主席树]

    题目链接 给定一棵n个点的树,给定m个人(m≤n)在哪个点上的信息,每个点可以有任意个人:然后给q个询问,每次问u到v上的路径有的点上编号最小的k(k≤10)个人(没有那么多人就该有多少人输出多少人) ...

  6. 主席树 ---- CodeForces - 813E(主席树,固定一端去考虑情况)

    第一道主席树题目. 题意:给定N个数,以及Q个询问,每个询问给出[L,R] 现在问在这个区间选最多的数,使得每个数出现次数不能大于K,强制在线. 主席树每个节点维护的是该位置上的数是否是k之内的数 这 ...

  7. CodeForces - 1401 F Reverse and Swap(线段树, 区间翻转, 区间交换,清晰易懂)

    CodeForces - 1401 F Reverse and Swap(线段树, 区间翻转, 区间交换)   首先一共有四个操作,第一个和第四个都是线段树的基本操作,直接用线段树实现.      第 ...

  8. CodeForces - 916D Jamie and To-do List(主席树+模拟)

    题目链接:点击查看 题目大意:模拟实现 nnn 次操作,每次操作共有四种类型: setaixiset \ a_i \ x_iset ai​ xi​:设置 aia_iai​ 的优先级为 xix_ixi​ ...

  9. CodeForces - 484E Sign on Fence(主席树区间合并+二分)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,需要回答 mmm 次询问,每次询问的格式如下: lrkl\ r\ kl r k,需要回答区间 [l,r][l,r][l,r] 内,所有长度 ...

最新文章

  1. 50岁马斯克又恋爱了!27岁金发女友长着芭比娃娃脸
  2. 基于Python的验证码识别技术
  3. linux gcc-9.2.0 源码编译
  4. 冒险岛公益服发布网_溧阳单面布来款定制,儿童冲锋衣厂家-大圣服装批发定制网...
  5. 常见非关系型数据库(NoSQL)推荐介绍
  6. 【Vue】 Error with Vue lazy loading components: “Failed to resolve async component“
  7. 北京林大计算机科技应为abc哪类,北京林业大学新生入学要准备什么?
  8. 机器学习之决策树的原理及sklearn实现
  9. 深度学习笔记-卷积神经网络CNN与循环神经网络RNN有什么区别?
  10. vue.js指令v-model实现方法
  11. Flutter动画SizeTransition使用解析
  12. angular 首屏加载优化_[转]Angular4首页加载慢优化之路
  13. android defStyleAttr/defStyleRes
  14. 转发和重定向又是什么“垃圾”——教你再分类
  15. Impala SQL 语言参考
  16. [Share]前端开发大众手册(包括工具、网址、经验等)
  17. 关于睡眠分期中人工判读的一些个人总结
  18. 初中生计算机课考试方案,信息技术中考备考方案
  19. Spire.Office for .NET 7.4.10 is released
  20. 数据库学生学籍管理系统

热门文章

  1. 【问题收集·中级】关于XMPP使用Base传送图片
  2. 转帖:关于MongoDB你需要知道的几件事
  3. C# 文件保存到数据库中或者从数据库中读取文件
  4. Android入门:DDMS视图
  5. 读取javascript脚本的正则表达式
  6. Mac 安装laravel 框架
  7. 已放弃 (核心已转储)_辽宁已放弃师弟!CBA公布外援优先续约名单:北京队不在列...
  8. hdu4971 流-最大权闭包
  9. hdu4503 概率
  10. 【Android 逆向】Android 逆向方法 ( 静态逆向解析 | 函数调用分析 | 动态运行跟踪 | 运行日志分析 | 文件格式解析 | 敏感信息分析 | 网络信息监控 | 环境伪装模拟 )