Codeforces 960F Pathwalks ( LIS && 树状数组 )
题意 : 给出若干个边,每条边按照给出的顺序编号,问你找到一条最长的边权以及边的编号同时严格升序的一条路径,要使得这条路径包含的边尽可能多,最后输出边的条数
分析 :
这题和 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 && 树状数组 )的更多相关文章
- [Codeforces 1208D]Restore Permutation (树状数组)
[Codeforces 1208D]Restore Permutation (树状数组) 题面 有一个长度为n的排列a.对于每个元素i,\(s_i\)表示\(\sum_{j=1,a_j<a_i} ...
- 【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 ...
- Codeforces 650D - Zip-line(树状数组)
Codeforces 题目传送门 & 洛谷题目传送门 我怕不是个 nt--一开始忽略了"询问独立"这个条件--然后就一直在想有什么办法维护全局 LIS--心态爆炸 首先离散 ...
- Codeforces 1139F Dish Shopping 树状数组套平衡树 || 平衡树
Dish Shopping 将每个物品拆成p 和 s 再加上人排序. 然后问题就变成了, 对于一个线段(L - R), 问有多少个(li, ri)满足 L >= li && R ...
- Codeforces 830B - Cards Sorting 树状数组
B. Cards Sorting time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- CodeForces 522D Closest Equals 树状数组
题意: 给出一个序列\(A\),有若干询问. 每次询问某个区间中值相等且距离最短的两个数,输出该距离,没有则输出-1. 分析: 令\(pre_i = max\{j| A_j = A_i, j < ...
- codeforces 589G G. Hiring(树状数组+二分)
题目链接: G. Hiring time limit per test 4 seconds memory limit per test 512 megabytes input standard inp ...
- 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 ...
- CodeForces–830B--模拟,树状数组||线段树
B. Cards Sorting time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
随机推荐
- css 命名 有的加# ,有的加点 ,有的没加。请问下都在什么情况下用的?
[nav{}]这样的样式是给特定的标签直接定义样式时使用的,这个样式名称是跟标签是相对应的,比如我要给<p></p>这个标签设置样式,那我就可以直接写:p{样式}就可以,但是这 ...
- linux free 命令 查看内存使用情况
查看Linux服务器下的内存使用情况,可以使用命令free -m [root@localhost ~]$ free // 以KB为单位显示内存使用情况 [root@localhost ~]$ free ...
- python 并发编程 多进程 生产者消费者模型介绍
一 生产者消费者模型介绍 为什么要使用生产者消费者模型 生产者指的是生产数据的任务,消费者指的是处理数据的任务, 生产数据目的,是为了给消费者处理. 在并发编程中,如果生产者处理速度很快,而消费者处理 ...
- c++ release和debug语句分离
#ifdef _DEBUG a=1; #else a=2; #endif
- NFC读写器调试总结20191203
以下为NFC读写器调试经验总结: 1.读写器部分,从TX1/TX2输出的13.56MHZ信号主要由L0/C0构成低通滤波器,用于滤除13.56MHZ的高次谐波,取值L0=1UH,C0=47PF时候,谐 ...
- AES ------ 第三方库
tiny-AES-c-master.zip 这个库可用
- IOMETER的简单使用
1. 网上下载文件: 一般至少包含两个: 2. 使用IOmeter 进行 功能测试. 注意选择 测试需要的盘 注意 选择的磁盘 会被充满. 会产生一个特别大的文件 3. 选择测试对象 4. 可以查看实 ...
- C++中setiosflags()的用法
cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(2); setiosfla ...
- python之网络部分
1.C/S B/S架构 C: client端 B: browse 浏览器 S: server端 C/S架构: 基于客户端与服务端之间的通信 QQ, 游戏,皮皮虾, 快手,抖音. 优点: 个性化 ...
- webelement类的方法
webelement类的方法,常用的汇总如下: clear()清空 例如登录时先清空输入框中的内容 driver.find_element_by_id('username').clear() clic ...