题意 : 给出若干个边,每条边按照给出的顺序编号,问你找到一条最长的边权以及边的编号同时严格升序的一条路径,要使得这条路径包含的边尽可能多,最后输出边的条数

分析 : 

这题和 LIS 很相似,不同的是加多了一个需要边和边相连这一条件

考虑使用树状数组求 LIS 的方法来考虑这题

如果你还不知道 LIS 还能用树状数组做 ==> Click here

由于有了只有能够构成路径的边才能搭配成子序列这一限制

我们将原本一维的树状数组开成二维

增加的维度表示以某个图中顶点为结尾这一状态

定义二维树状数组 c[Node][Weight]

表示以顶点(图中的顶点) Node 为结尾、边权为 Weight 时候的 LIS 长度

然后对于边  (a、b、w) 用 c[a][w] + 1 去更新 c[b][w] 即可

更新过程类似树状数组求解 LIS 问题一样

最后就是这题貌似还能用主席树等可持久化数据结构做

待我研究后补上.......

#include<bits/stdc++.h>
#define lowbit(i) (i & (-i))
using namespace std;
;
const int INF = 0x3f3f3f3f;
map<int, int> c[maxn];///1e5的二维数组开不下、采用map来代替开
int N, M;

int query(int i, int w)
{
    ;
    ){
        ret = max(ret, c[i][w]);
        w -= lowbit(w);
    }
    return ret;
}

void update(int i, int w, int val)///update的时候注意w不能为 0
{
    while(w < maxn){
        c[i][w] = max(c[i][w], val);
        w += lowbit(w);
    }
}

int main(void)
{
    scanf("%d %d", &N, &M);
    int a, b, w, MX = -INF;
    ; i<=M; i++){
        scanf("%d %d %d", &a, &b, &w);
        MX = max(MX, ++w);
        update(b, w, query(a, w-)+);
    }

    ;
    ; i<=N; i++)
        ans = max(ans, query(i, MX));

    printf("%d\n", ans);
    ;
}

Codeforces 960F Pathwalks ( LIS && 树状数组 )的更多相关文章

  1. [Codeforces 1208D]Restore Permutation (树状数组)

    [Codeforces 1208D]Restore Permutation (树状数组) 题面 有一个长度为n的排列a.对于每个元素i,\(s_i\)表示\(\sum_{j=1,a_j<a_i} ...

  2. 【Codeforces】Gym 101156E Longest Increasing Subsequences LIS+树状数组

    题意 给定$n$个数,求最长上升子序列的方案数 根据数据范围要求是$O(n\log n)$ 朴素的dp方程式$f_i=max(f_j+1),a_i>a_j$,所以记方案数为$v_i$,则$v_i ...

  3. Codeforces 650D - Zip-line(树状数组)

    Codeforces 题目传送门 & 洛谷题目传送门 我怕不是个 nt--一开始忽略了"询问独立"这个条件--然后就一直在想有什么办法维护全局 LIS--心态爆炸 首先离散 ...

  4. Codeforces 1139F Dish Shopping 树状数组套平衡树 || 平衡树

    Dish Shopping 将每个物品拆成p 和 s 再加上人排序. 然后问题就变成了, 对于一个线段(L - R), 问有多少个(li, ri)满足  L >= li && R ...

  5. Codeforces 830B - Cards Sorting 树状数组

    B. Cards Sorting time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  6. CodeForces 522D Closest Equals 树状数组

    题意: 给出一个序列\(A\),有若干询问. 每次询问某个区间中值相等且距离最短的两个数,输出该距离,没有则输出-1. 分析: 令\(pre_i = max\{j| A_j = A_i, j < ...

  7. codeforces 589G G. Hiring(树状数组+二分)

    题目链接: G. Hiring time limit per test 4 seconds memory limit per test 512 megabytes input standard inp ...

  8. HDU - 5542 The Battle of Chibi(LIS+树状数组优化)

    The Battle of Chibi Cao Cao made up a big army and was going to invade the whole South China. Yu Zho ...

  9. CodeForces–830B--模拟,树状数组||线段树

    B. Cards Sorting time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

随机推荐

  1. 【miscellaneous】网络摄像机

    自20世纪90年代初期网络摄像机开始诞生,产业已历经20余年的演变. "IP大时代"的口号在安防领域已响彻已久,但也是自2015年至今才开使有了真正的底气.当全面超越模拟已尘埃落定 ...

  2. windows qt 使用openssl API

    1.下载安装openssl http://dl.pconline.com.cn/download/355862-1.html 版本: OpenSSL(Win32) 1.0.1g 2.配置QT项目文件, ...

  3. vue.js之过渡动画

    vue提供了一个封装动画的组件 <transition name="tr"></transition>,将需要执行动画的元素包裹在该组件中,在通过css修改 ...

  4. HTTP请求报文(请求行、请求头、请求体)

    HTTP协议 1.简介 HTTP协议(Hyper Text Transfer Protocol,超文本传输协议),是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的 ...

  5. Largest Beautiful Number CodeForces - 946E (贪心)

    大意: 定义一个好数为位数为偶数, 且各位数字重排后可以为回文, 对于每个询问, 求小于$x$的最大好数. 假设$x$有$n$位, 若$n$为奇数, 答案显然为$n-1$个9. 若为偶数, 我们想让答 ...

  6. element-ui select 下拉框位置错乱--解决

    element-ui select 下拉框位置错乱 由于使用 element-ui 的 select 组件时,下拉框的位置错乱了. 开始查找问题 通过各种问题查找,发现是 css 问题 css bod ...

  7. Mac下的常用快捷键总结

    由于在公司的时候是使用的Windows下进行开发工作,但是回家之后,有时候要使用自己的Mac进行开发等工作,那么流利的使用快捷键就变得尤其的重要. 1. 退出软件 cmd + q 2.将最前面的窗口最 ...

  8. PDF转图片,在线PDF转JPG/PNG

    [在线DEMO](https://oktools.net/pdf2img) 原理 使用pdf.js预览图片,pdf.js将pdf通过canvas将每一页渲染出来,然后我们通过canvas的toData ...

  9. 从POST与GET、REQUEST响应的php和asp写法对比谈数据过滤

    <!DOCTYPE html><!--To change this license header, choose License Headers in Project Propert ...

  10. laravel 添加筛选方式

    protected function grid() { return Admin::grid(Client::class, function (Grid $grid) { $grid->id(' ...