https://www.luogu.org/problemnew/show/P2146

几乎是一个裸题

#include<cstdio>
#include<cstring>
#include<algorithm>#define ls (p << 1)
#define rs ((p << 1) | 1)
#define mid ((l + r) >> 1)const int N = 200010, M = N << 2;
using namespace std;int n, Q, last[N], pre[N], now[N], son[N], tot, a[N], cnt, w[N], size[N];
int hson[N], top[N], fa[N], dep[N];
char op[12];struct Tree {int sum[M], cov[M], size[M];void down(int p) {if (cov[p] != -1) {sum[ls] = size[ls] * cov[p], sum[rs] = size[rs] * cov[p];cov[ls] = cov[rs] = cov[p], cov[p] = -1;}}void build(int p, int l, int r) {if (l == r) {sum[p] = 0, cov[p] = -1, size[p] = 1;return;}build(ls, l, mid), build(rs, mid + 1, r);sum[p] = sum[ls] + sum[rs], size[p] = size[ls] + size[rs];}void change(int p, int l, int r, int a, int b, int v) {if (l == a && r == b) {sum[p] = v * size[p], cov[p] = v;return;}down(p);if (b <= mid) change(ls, l, mid, a, b, v);else if (a > mid) change(rs, mid + 1, r, a, b, v);else change(ls, l, mid, a, mid, v), change(rs, mid + 1, r, mid + 1, b, v);sum[p] = sum[ls] + sum[rs];}int query(int p, int l, int r, int a, int b) {if (l == a && r == b) {return sum[p];}down(p);if (b <= mid) return query(ls, l, mid, a, b);else if (a > mid) return query(rs, mid + 1, r, a, b);else return query(ls, l, mid, a, mid) + query(rs, mid + 1, r, mid + 1, b);}
} Seg;void add(int a, int b) {pre[++ tot] = now[a], now[a] = tot, son[tot] = b;
}
void dfs(int x) {size[x] = 1;for (int y = now[x]; y; y = pre[y])if (son[y] != fa[x]) {fa[son[y]] = x, dep[son[y]] = dep[x] + 1;dfs(son[y]), size[x] += size[son[y]];if (size[son[y]] > size[hson[x]]) hson[x] = son[y];}
}void btree(int x, int tp) {w[x] = ++ cnt, a[cnt] = 0, top[x] = tp;if (hson[x]) btree(hson[x], tp);for (int y = now[x]; y; y = pre[y])if (son[y] != fa[x] && son[y] != hson[x])btree(son[y], son[y]);last[x] = cnt;
}void answer(int a,int b) {int f1 = top[a], f2 = top[b], sum = 0, num = dep[b] - dep[a] + 1;while (f1 != f2) {if (dep[f1] < dep[f2]) swap(f1, f2), swap(a, b);sum += Seg.query(1, 1, n, w[f1], w[a]);Seg.change(1, 1, n, w[f1], w[a], 1);a = fa[f1], f1 = top[a];}if (dep[a] > dep[b]) swap(a, b);sum += Seg.query(1, 1, n, w[a], w[b]);Seg.change(1, 1, n, w[a], w[b], 1);printf("%d\n", num - sum);
}int main() {scanf("%d", &n);for (int i = 2, x; i <= n; i ++) scanf("%d", &x), x ++, add(x, i);dfs(1), btree(1, 1), Seg.build(1, 1, n);scanf("%d", &Q);for (int i = 1, x; i <= Q; i ++) {scanf("%s%d", op, &x), x ++;if (op[0] == 'i') answer(1, x);else {printf("%d\n", Seg.query(1, 1, n, w[x], last[x]));Seg.change(1, 1, n, w[x], last[x], 0);}}return 0;
}

转载于:https://www.cnblogs.com/shandongs1/p/8413493.html

[Luogu] 软件包管理器相关推荐

  1. BZOJ4196:[NOI2015]软件包管理器——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=4196 https://www.luogu.org/problemnew/show/P2146 你决定 ...

  2. helm部署仓库中没有的包_Kubernetes的Helm软件包管理器简介

    helm部署仓库中没有的包 Before we dive into the Helm package manager, I'm going to explain some key concepts t ...

  3. Linux学习笔记重新梳理20180702 之 yum软件包管理器

    2019独角兽企业重金招聘Python工程师标准>>> Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中 ...

  4. BZOJ4196[Noi2015]软件包管理器——树链剖分+线段树

    题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个 ...

  5. 微软开源 Windows 软件包管理器 winget,一行命令安装软件

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 来源 | https://www.oschin ...

  6. 【NOI2015】软件包管理器

    NOI难得的水题,话说还是T2诶--又学到了线段树的一种新的魔性使用 看sxysxy大神的代码才写出来的,sxysxy_orz 原题: Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包 ...

  7. bzoj4196:[Noi2015]软件包管理器

    Description Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖( ...

  8. yum(Fedora和RedHat以及SUSE中的Shell前端软件包管理器)命令详解

    yum官方网站:http://yum.baseurl.org/ Fedora对于yum的介绍:http://fedoraproject.org/wiki/Yum yum(全称为 Yellow dog ...

  9. Mac OS 软件包管理器Homebrew

    前言 当我们在 Mac os 下安装软件的时候,常常会因为缺失依赖包而不得不停止,这时候通常的做法就是在网上下载各种依赖包来进行一一的安装,这种操作难免会有些复杂了,并且很浪费时间.那么今天要讲的是一 ...

最新文章

  1. python命令解析_python解析命令行
  2. 蜗杆单轨滑轨的驱动的统一接口
  3. (11/24) css进阶:Less文件的打包和分离
  4. c语言中错误executing,C语言编程中常见问题解读.doc
  5. 现在Windows Server 2012在Windows Azure 虚拟机库中可用
  6. oracle 查看动态性能视图,Oracle 中的V$ 动态性能视图
  7. 14、高可用keepalived搭建及切换
  8. 厉精图治的拼音及解释
  9. 三十而立,从零开始学ios开发(八):Autorotation and Autosizing
  10. 数据库系统概论第五版(王珊) 课后习题答案
  11. js实现斗地主的算法 验证牌型 找大于上家的牌型
  12. SpringBoot整合JPA(六)
  13. MATLAB打不开,只在任务栏闪一下就无反应了怎么办?
  14. 医药集采对药企有什么影响?
  15. 思科模拟器服务器登录显示什么,思科模拟器服务器远程登录
  16. 除了Google,还有哪些公司能做出AlphaGo?
  17. RTSP支持MPEG-4格式监控
  18. 内容赛道进入集团作战时代,巨头呈现“一超多强”竞争格局
  19. Excel VBA 批量取工作表名称
  20. Linux上使用ZFS

热门文章

  1. ASP.NET Core和Web API:用于管理异常和一致响应的自定义包装器
  2. 实时 Git,在版本控制之前控制源码
  3. 微软为 Java 开发者推出 VSCode 安装程序
  4. bootstrap 2021-04-20
  5. chart.js雷达图不显示刻度标签_Matplotlib从入门再也不放弃
  6. python 循环语句结果存储_Hello,Python!小鲸教你学Python(八)条件语句和循环
  7. 冷热分离和直接使用大数据库_智能冷热分离的思考-内存数据库
  8. SQL Server列名显示无效
  9. 怎么解log方程_微观动力学解合成氨催化反应TOF
  10. oracle 循环修改数据库,oracle对一个表的多行数据进行修改,SQL批量修改