洛谷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用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安 ...
随机推荐
- 【HDU4966】GGS-DDU
题意 有n种科目,每个科目都有一个最高的等级a[i].开始的时候,每个科目的等级都是0.现在要选择一些课程进行学习使得每一个科目都达到最高等级.这里有m节课可供选择.对于每门课给出L1[i],c[i] ...
- YII 模型关联之 一对一
需求,一个用户对应一个用户信息表, 这两者之间的关系就是一对一 //首先查找出一个用户出来 $user=Users::find()->'])->one(); //然后查询, 第一个参数是 ...
- Java IO简介
-------------siwuxie095 Java IO简介: IO 也写作"I/O",可理解为 In 和 Out,即 输入 与 输出 ...
- php扩展开发3--扩展类传参数
1.需要实现的细节 实现一个person类 ,实现一个doing方法和saying方法 在构造方法中传递一个数组,在doing中打印此数组 saying方法中,构建一个空数组,返回,不需要传参. 2. ...
- 34.UCASE() LCASE() 函数
UCASE() 函数 UCASE 函数把字段的值转换为大写. SQL UCASE() 语法 SELECT UCASE(column_name) FROM table_name SQL UCASE() ...
- DataTable 转换成匿名集合类
using System;using System.CodeDom.Compiler;using System.Collections.Generic;using System.Data;using ...
- Mybatis_映射文件_Select
一.Select元素来定义查询操作 Id:唯一标识符.用来引用这条SQL语句,需要和接口的方法名一致 parameterType:参数类型.可以不传,MyBatis会根据TypeHandler自动推断 ...
- IIS关闭Trace、OPTIONS方法
方法(1):web.config 在<configuration>节点下添加如下代码: <system.webServer> <security> <requ ...
- word 2013如何从某一页开始插入页码
把光标移入要插入页面的最前面 插入分页符 在要插入页码的页脚双击打开页脚设计 取消页脚和前面页眉的链接 插入页码
- 微信支付接入的总结 —— NATIVE & MWEB & JSAPI
这段时间工作中需要对接微信支付,而且要多个端同时进行接入,web端,手机浏览器,微信浏览器,所以研究了下.不同场景选择合适的接入方式是必须的.https://pay.weixin.qq.com/wik ...