题目大意:给你一张$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相关推荐

  1. 【CodeForces】960 F. Pathwalks 主席树+动态规划

    [题目]F. Pathwalks [题意]给定n个点m条边的有向图,可能不连通有重边有自环.每条边有编号 i 和边权 wi ,求最长的路径(可以经过重复节点)满足编号和边权都严格递增.n,m,wi&l ...

  2. [C++ map dp]codeforces 960F. Pathwalks

    题目传送门:960F 思路: 题目给人的感觉很像最长上升子序列,自然而然想到用dp的思路去处理 题目中给的限制条件是,要接上前面的边,前面的边权一定要小于当前的边权(题目按照输入的顺序,因此只找前面的 ...

  3. 【codeforces】【比赛题解】#960 CF Round #474 (Div. 1 + Div. 2, combined)

    终于打了一场CF,不知道为什么我会去打00:05的CF比赛-- 不管怎么样,这次打的很好!拿到了Div. 2选手中的第一名,成功上紫! 以后还要再接再厉! [A]Check the string 题意 ...

最新文章

  1. golang中小数除以大数为0的坑
  2. 信息系统项目管理师-项目沟通管理与干系人管理核心知识点思维脑图
  3. http://blog.sina.com.cn/s/blog_5bd6b4510101585x.html
  4. 渗透测试流程(单台服务器)
  5. 关于oracle的certview
  6. Java网络编程介绍
  7. [三思笔记]一步一步学DataGuard.zip
  8. CMM3和CMMI4的差别--过程域
  9. GetTickCount函数
  10. 2021年最新3d材质贴图素材大合集来咯
  11. mysql批量插入on duplicate key update
  12. 10 个最佳 VSCode 插件,帮助你写出更优雅的代码
  13. android 高仿 猿题库,猿题库(com.fenbi.android.gaozhong) - 9.17.2 - 应用 - 酷安
  14. 开发会自测为什么测试还会单独存在?软件测试八大误区
  15. 用Python的Seaborn库绘制17个超好看图表
  16. Supervisor守护Java进程_使用Supervisor来守护我们的服务
  17. MATLAB: 2018a百度云资源、迅雷资源、安装步骤
  18. 【unity中运行HTC VIVE的案例场景时一直不显示在头盔上,VR其他都正常】
  19. 神经网络概述【神经网络一】
  20. 【嵌入式】流水灯程序

热门文章

  1. 有空时深入阅读这两篇文章
  2. 我来发美食啦,馋一下各位看官
  3. 没有人会尊重弱者,把弱者当成朋友!人们永远追随强者,永远和强者结盟!
  4. 禁用人脸识别四个月后,旧金山人证明了他们的先见之明
  5. 程序员应该学习C语言的十个理由
  6. 获取frame_用Python获取可能是全网最全的杰尼龟表情包(第一弹)
  7. python文件读写用到的库_python 读写txt文件并用jieba库进行中文分词
  8. 思科服务器与交换机链接配置文件,使用思科S系列交换机上的配置迁移工具转换配置文件...
  9. 抓包工具Wireshark基本介绍和学习TCP三次握手
  10. Atom:A hackable text editor for the 21st Century