洛谷P2146 [NOI2015]软件包管理器
https://www.luogu.org/problemnew/show/P2146 传送门
简单的树链剖分......维护下当前安装了多少个包......修改后查询下就行了......附上极其丑陋的代码......
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
;
int head[N], to[N], v[N], p;
void build(int a, int b) { v[++ p] = b; to[p] = head[a]; head[a] = p; }
#define mid (l + r >> 1)
], lazy[N << ];
void push_down(int c, int l, int r) {
if( !lazy[c]) return ;
lazy[c] --;
tr[c << ] = (mid - l + ) * lazy[c]; tr[c << |] = (r - mid) * lazy[c];
lazy[c << ] = lazy[c << |] = lazy[c] + ; lazy[c] = ;
}
void change(int c, int l, int r, int L, int R, int o) {
if( L <= l && R >= r) {
tr[c] = (r - l + ) * o; lazy[c] = o + ; return ;
}
push_down(c, l, r);
, l, mid, L, R, o);
|, mid+, r, L, R, o);
tr[c] = tr[c << ] + tr[c << |];
}
int get_(int c, int l, int r, int L, int R) {
if( l == L && R == r) return tr[c];
push_down(c, l, r);
, l, mid, L, R);
|, mid+, r, L, R);
, l, mid, L, mid) + get_(c << |, mid+, r, mid+, R);
}
int son[N], si[N];
void search(int u) {
si[u] = ; son[u] = ;
for( int i = head[u]; ~i; i = to[i]) {
search(v[i]), si[u] += si[v[i]];
if( si[v[i]] > si[son[u]]) son[u] = v[i];
}
}
int top[N], dfs[N], dfn[N], cnt;
void build_son(int u, int c) {
top[u] = c; dfs[u] = ++cnt;
if( son[u]) build_son(son[u], c);
for( int i = head[u]; ~i; i = to[i])
if( v[i] != son[u]) build_son(v[i], v[i]);
dfn[u] = cnt;
}
int n, q, pre[N];
void query(int a) {
];
while( a) {
change(, , n, dfs[top[a]], dfs[a], ); a = pre[top[a]];
}printf(] - tcmp);
}
];
int main() {
scanf(, ;
; i <= n; i ++) scanf("%d", pre + i), pre[i] ++ ;
; i <= n; i ++) build(pre[i], i);
search();build_son(, );
scanf("%d", &q);
, a; i <= q; i ++) {
scanf("%s%d", s, &a); a ++;
] == 'i') query(a);
else {
]; change(, , n, dfs[a], dfn[a], );
printf(]);
}
}
}

洛谷P2146 [NOI2015]软件包管理器的更多相关文章
- 洛谷 P2146 [NOI2015]软件包管理器 解题报告
P2146 [NOI2015]软件包管理器 题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软 ...
- 洛谷 P2146 [NOI2015]软件包管理器 树链剖分
目录 题面 题目链接 题目描述 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 输出样例#1: 输入样例#2: 输出样例#2: 说明 说明 思路 AC代码 总结 题面 题目链接 P ...
- 洛谷 P2146 [NOI2015]软件包管理器 (树链剖分模板题)
题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个 ...
- 洛谷 P2146 [NOI2015]软件包管理器
真没有想到,这竟然会是一道NOI的原题,听RQY说,这套题是北大出的,北大脑抽认为树剖很难... 只恨没有早学几年OI,只A这一道题也可以出去吹自己一A了NOI原题啊 好了,梦该醒了,我们来看题 以后 ...
- 洛谷P2146 [NOI2015]软件包管理器 题解 树链剖分+线段树
题目链接:https://www.luogu.org/problem/P2146 本题涉及算法: 树链剖分: 线段树(区间更新及求和,涉及懒惰标记) 然后对于每次 install x ,需要将 x 到 ...
- 洛谷 pP2146 [NOI2015]软件包管理器
题目的传送门 题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖( ...
- 洛谷 2146 [NOI2015]软件包管理器
[题解] 每个软件只依赖另一个软件,且依赖关系不构成环,那么很容易想到这是树形结构. 我们用1表示以安装,用0表示未安装或已卸载:那么安装一个软件,就是把它到树根的路径上所有的点都改为1:卸载一个软件 ...
- 题解 P2146 [NOI2015]软件包管理器
P2146 [NOI2015]软件包管理器 感觉代码比其他题解更简洁qwq 树链剖分模板题 install x:将1~x的路径上的节点全部变成1(安装x需要先安装1~x) uninstall x:将x ...
- P2146 [NOI2015]软件包管理器
题目链接:https://www.luogu.org/problemnew/show/P2146 题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安 ...
随机推荐
- error:crosses initialization of ...的解决办法
switch(c) { case 0x01: int temp = a + b; .... break; case 0x02: break; default:break; } 此时会报如题所示错误 原 ...
- 面试题:ConcurrentHashMap实现线程安全的原理
在ConcurrentHashMap没有出现以前,jdk使用hashtable来实现线程安全,但是hashtable是将整个hash表锁住,所以效率很低下. ConcurrentHashMap将数据分 ...
- 关于前端XSS攻击、短信轰炸等问题
关于前端的XSS攻击: 这里有一篇Ryf老师的写的关于使用 Content Security Policy (简称 CSP 防御)来防御xss攻击,简单来说就是设置白名单,告诉浏览器哪些链接.内容是 ...
- 33.HAVING 子句
HAVING 子句 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用. SQL HAVING 语法 SELECT column_name, aggregate_f ...
- python pipelines 用法
http://zacstewart.com/2014/08/05/pipelines-of-featureunions-of-pipelines.html http://blog.csdn.net/m ...
- django获取字段列表(values/values_list/flat)
django获取字段列表(values/values_list/flat) values方法可以获取number字段的字典列表 values_list可以获取number的元组列表 values_li ...
- MongoDB整理笔记のSharding分片
这是一种将海量的数据水平扩展的数据库集群系统,数据分表存储在sharding 的各个节点上,使用者通过简单的配置就可以很方便地构建一个分布式MongoDB 集群.MongoDB 的数据分块称为 chu ...
- mysql 游标CURSOR
FETCH cursor_works INTO num,provinceIDs,cityIDs,SourceID; 定义的变量值必须与 游标中的字段不同,一一对应 DECLARE cursor_wor ...
- 【转】android 布局优化
前言 本篇文章为Android优化的布局部分,该部分应该是Android中很重要的,无论是在自定义控件中,还是在简单的书写布局时,都应该尽量遵循一些优化原则,这样布局的绘制效率才会更高,体验才能更好. ...
- 基于CentOS6定制自己的ISO安装光盘
警告:转载请注明出处 https://www.cnblogs.com/BoyTNT/p/9322927.html 1.目标 >> 基于CentOS-6.10-x86_64-minimal ...