洛谷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用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安 ...
随机推荐
- Github简单的上传和修改
先自己手动创建一个仓库 echo "# delet" >> README.md git init git add . git commit -m "first ...
- PCL 平面模型分割
点云操作中,平面的分割是经常遇到的问题,下面的例子就是如何利用PCL库提拟合出的参数,之后就可以过滤掉在平面附近的点云. #include <iostream> #include < ...
- Hyperledger Fabric1.0 整体结构
整体结构 Hyperledger Fabric 在 1.0 中,架构已经解耦为三部分: fabric-peer:主要起到 peer 作用,包括 endorser.committer 两种角色: fab ...
- 学习Vue.js需要了解的部分内容
重要: 1.如果要通过js/模板引用 图片到项目,图片路径需要使用require. 2.$event: $event 等于$emit 抛出的值,还可以使用$event.target.value. $e ...
- 一步到位带你入门Selenium
其实,关于这篇文章发布前还是有很多思考的,我是不想发布的,因为关于selenium的文章博客园里面有很多的介绍,写的详细的,也有写的不详细的,那么我的这篇文章的定位是基于selnium从开始到最后的框 ...
- MVC5应用程序生命周期lifecycle
- Usage of the @ (at) sign in ASP.NET
from:http://www.mikesdotnetting.com/article/258/usage-of-the-at-sign-in-asp-net Thursday, January 22 ...
- css总结2:Flex 布局教程:Flex 语法(转)
Flex 布局教程:语法篇 网页布局(layout)是 CSS 的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些 ...
- 四则运算(Java) 陈志海 邓宇
目录 Github项目地址 PSP表格 功能要求 题目 功能(已全部实现) 效能分析 设计实现过程 数值生成 算式生成 问题集生成 设计实现过程 代码说明 测试运行 代码覆盖率 项目小结 Github ...
- 观察者(Observer)模式 * 委托事件
观察者(Observer)模式:定义了一种一对多的依赖关系.让多个观察者对象同时监听某一个主题对象. 这个主题对象发生变化时会通知所有观察者对象,使他们字段更新自己 /* * 抽象主题(Subje ...