[CF960F]Pathwalks
2024-06-05 06:07:58
题目大意:给你一张$n$个点$m$条边的带权有向图,可能有重边和自环。边会按照顺序给出。让你求出一条最长的路径,使得路径上的边满足边权和出现的时间严格递增。路径可以重复经过同一个点。
想办法把它转化成序列上的最长上升序列
我们如果按顺序加边,那么边做边求是符合边的出现时间递增的要求的
所以当给你一条边$a$->$b$边权为$c$时,我们要在合理的复杂度内查到到$a$点边权小于$c$的最长上升序列
然后用它去更新答案和到$b$边权小于等于$c$的最大值
这显然是个线段树,然后我们再搞个动态开点,完事
代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define M 500010 5 #define ls ch[node][0] 6 #define rs ch[node][1] 7 using namespace std; 8 int read() 9 { 10 char ch=getchar();int x=0; 11 while(ch>'9'||ch<'0') ch=getchar(); 12 while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); 13 return x; 14 } 15 int n,m,cnt,ans; 16 int root[M],val[M<<2],ch[M<<2][2]; 17 void insert(int &node,int l,int r,int k,int x) 18 { 19 if(!node) node=++cnt; 20 val[node]=max(val[node],x); 21 if(l==r) return; 22 int mid=(l+r)/2; 23 if(k<=mid) insert(ls,l,mid,k,x); 24 else insert(rs,mid+1,r,k,x); 25 } 26 int query(int node,int l,int r,int l1,int r1) 27 { 28 if(!node) return 0; 29 if(l1>r||r1<l) return 0; 30 if(l1<=l&&r1>=r) return val[node]; 31 int mid=(l+r)/2; 32 return max(query(ls,l,mid,l1,r1),query(rs,mid+1,r,l1,r1)); 33 } 34 int main() 35 { 36 n=read();m=read(); 37 for(int i=1;i<=m;i++) 38 { 39 int a=read(),b=read(),z=read()+1; 40 int x=query(root[a],1,100000,1,z-1)+1; 41 ans=max(ans,x); 42 insert(root[b],1,100001,z,x); 43 } 44 printf("%d",ans); 45 return 0; 46 }
转载于:https://www.cnblogs.com/Slrslr/p/9694766.html
[CF960F]Pathwalks相关推荐
- 【CodeForces】960 F. Pathwalks 主席树+动态规划
[题目]F. Pathwalks [题意]给定n个点m条边的有向图,可能不连通有重边有自环.每条边有编号 i 和边权 wi ,求最长的路径(可以经过重复节点)满足编号和边权都严格递增.n,m,wi&l ...
- [C++ map dp]codeforces 960F. Pathwalks
题目传送门:960F 思路: 题目给人的感觉很像最长上升子序列,自然而然想到用dp的思路去处理 题目中给的限制条件是,要接上前面的边,前面的边权一定要小于当前的边权(题目按照输入的顺序,因此只找前面的 ...
- 【codeforces】【比赛题解】#960 CF Round #474 (Div. 1 + Div. 2, combined)
终于打了一场CF,不知道为什么我会去打00:05的CF比赛-- 不管怎么样,这次打的很好!拿到了Div. 2选手中的第一名,成功上紫! 以后还要再接再厉! [A]Check the string 题意 ...
最新文章
- golang中小数除以大数为0的坑
- 信息系统项目管理师-项目沟通管理与干系人管理核心知识点思维脑图
- http://blog.sina.com.cn/s/blog_5bd6b4510101585x.html
- 渗透测试流程(单台服务器)
- 关于oracle的certview
- Java网络编程介绍
- [三思笔记]一步一步学DataGuard.zip
- CMM3和CMMI4的差别--过程域
- GetTickCount函数
- 2021年最新3d材质贴图素材大合集来咯
- mysql批量插入on duplicate key update
- 10 个最佳 VSCode 插件,帮助你写出更优雅的代码
- android 高仿 猿题库,猿题库(com.fenbi.android.gaozhong) - 9.17.2 - 应用 - 酷安
- 开发会自测为什么测试还会单独存在?软件测试八大误区
- 用Python的Seaborn库绘制17个超好看图表
- Supervisor守护Java进程_使用Supervisor来守护我们的服务
- MATLAB: 2018a百度云资源、迅雷资源、安装步骤
- 【unity中运行HTC VIVE的案例场景时一直不显示在头盔上,VR其他都正常】
- 神经网络概述【神经网络一】
- 【嵌入式】流水灯程序
热门文章
- 有空时深入阅读这两篇文章
- 我来发美食啦,馋一下各位看官
- 没有人会尊重弱者,把弱者当成朋友!人们永远追随强者,永远和强者结盟!
- 禁用人脸识别四个月后,旧金山人证明了他们的先见之明
- 程序员应该学习C语言的十个理由
- 获取frame_用Python获取可能是全网最全的杰尼龟表情包(第一弹)
- python文件读写用到的库_python 读写txt文件并用jieba库进行中文分词
- 思科服务器与交换机链接配置文件,使用思科S系列交换机上的配置迁移工具转换配置文件...
- 抓包工具Wireshark基本介绍和学习TCP三次握手
- Atom:A hackable text editor for the 21st Century