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

分析 : 

这题和 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. (5.1.5)引擎管理——多服务器管理之中央管理服务器(CMS)

    关键词:中央管理服务器,CMS,多服务器管理 中央管理服务器 -[1]打开 视图->已注册的服务器 [2]注册中央管理服务器 右击中央管理器->注册中央管理服务器 这里输入IP.主机名都可 ...

  2. 详解Vue 如何监听Array的变化

    详解Vue 如何监听Array的变化:https://www.jb51.net/article/162584.htm

  3. POJ 2253 Frogger(dijkstra 最短路

    POJ 2253 Frogger Freddy Frog is sitting on a stone in the middle of a lake. Suddenly he notices Fion ...

  4. C语言--浮点数

    在程序中使用浮点数 -- 浮点数的精确性有限 -- 在从c语言中float类型的精确度只到小数点的7位 -- 浮点数只能在一定范围内去相信它 -- 在有精确度高的要求下不要使用浮点数(在算钱的时候,误 ...

  5. MySQL数据表操作命令

    mysql语句: 1.修改表名: rename table 旧表名 to 新表名; 2.修改字段类型: alter table 表名 modify column 字段名 字段类型(长度) 3.修改字段 ...

  6. jmeter强大的扩展插件!!

    jmeter4.0以上版本,如jmeter5.1.1版本的集成插件,只需要在官网下下载“plugins-manager.jar”包,放在jmeter安装路径的lib/ext目录下即可使用. (但该ja ...

  7. java实现spark常用算子之cogroup

    import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaPairRDD;import org.apache.spa ...

  8. 使用layer弹窗和layui表单做新增功能

    注释:代码参考http://blog.51cto.com/825272560/1891158,在其修改之上而来,在此感谢! 1.需求:使用layer在弹窗内完成新增,成功后提示并刷新页面(父页面,li ...

  9. s:schema报错问题

    解决方案: 删除所有<s:element ref="s:schema"/>标签 说明书改为本地文件

  10. git和svn 及git使用&解决上线冲突

    一.svn git的工作流程 git 的工作流程图 二.git的基础使用 git 的安装 1.下载对应版本:https://git-scm.com/download 2.安装git:在选取安装路径的下 ...