[NOI2015]软件包管理器 洛谷2146 BZOJ4196

手把手教你设计T型和Π型衰减器:从理论计算到实际搭建(含误差分析) 本文详细介绍了T型和Π型衰减器的设计方法,从理论计算到实际搭建,包括电阻值推导、元件选择技巧及误差分析。通过实例演示如何设计50Ω系统中的10dB衰减器,并提供了高频应用和优化策略,帮助电子工程师掌握阻抗匹配与信号衰减的核心技术。 阅读详情

题目描述

Linux用户和OSX用户一定对软件包管理器不会陌生。通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个软件包的安装所依赖的其它软件包),完成所有的配置。Debian/Ubuntu使用的apt-get,Fedora/CentOS使用的yum,以及OSX下可用的homebrew都是优秀的软件包管理器。

你决定设计你自己的软件包管理器。不可避免地,你要解决软件包之间的依赖问题。如果软件包A依赖软件包B,那么安装软件包A以前,必须先安装软件包B。同时,如果想要卸载软件包B,则必须卸载软件包A。现在你已经获得了所有的软件包之间的依赖关系。而且,由于你之前的工作,除0号软件包以外,在你的管理器当中的软件包都会依赖一个且仅一个软件包,而0号软件包不依赖任何一个软件包。依赖关系不存在环(若有m(m≥2)个软件包A1,A2,A3,⋯,Am,其中A1依赖A2,A2依赖A3,A3依赖A4,……,A[m-1]依赖Am,而Am依赖A1,则称这m个软件包的依赖关系构成环),当然也不会有一个软件包依赖自己。

现在你要为你的软件包管理器写一个依赖解决程序。根据反馈,用户希望在安装和卸载某个软件包时,快速地知道这个操作实际上会改变多少个软件包的安装状态(即安装操作会安装多少个未安装的软件包,或卸载操作会卸载多少个已安装的软件包),你的任务就是实现这个部分。注意,安装一个已安装的软件包,或卸载一个未安装的软件包,都不会改变任何软件包的安装状态,即在此情况下,改变安装状态的软件包数为0。

输入输出格式

输入格式:
从文件manager.in中读入数据。

输入文件的第1行包含1个整数n,表示软件包的总数。软件包从0开始编号。

随后一行包含n−1个整数,相邻整数之间用单个空格隔开,分别表示1,2,3,⋯,n−2,n−1号软件包依赖的软件包的编号。

接下来一行包含1个整数q,表示询问的总数。之后q行,每行1个询问。询问分为两种:

install x:表示安装软件包x

uninstall x:表示卸载软件包x

你需要维护每个软件包的安装状态,一开始所有的软件包都处于未安装状态。

对于每个操作,你需要输出这步操作会改变多少个软件包的安装状态,随后应用这个操作(即改变你维护的安装状态)。

输出格式:
输出到文件manager.out中。

输出文件包括q行。

输出文件的第i行输出1个整数,为第i步操作中改变安装状态的软件包数。

代码

树剖板子,一开始maxn开1e5+5结果:
这里写图片描述
而且答案还是对的,真神奇。

#include<cstdio>
#include<string>
#include<cstring>
#define ls (o<<1)
#define rs (o<<1|1)
#define mid (L+R>>1)
using namespace std;
const int maxn=2e5+5;
char ch[30];
int N,Q,tot,cnt;
int son[maxn],nxt[maxn],lnk[maxn];
int fa[maxn],sz[maxn],top[maxn],s[maxn],dep[maxn],id[maxn];
struct Seg {
    int tag[maxn<<2],sum[maxn<<2];
    inline void init() {memset(tag,-1,sizeof tag);}
    inline void pushup(int o) {sum[o]=sum[ls]+sum[rs];}
    inline void pushdown(int o,int L,int R) {
        tag[ls]=tag[o],sum[ls]=tag[o]*(mid-L+1);
        tag[rs]=tag[o],sum[rs]=tag[o]*(R-mid);
        tag[o]=-1;
    }
    void Modify(int o,int L,int R,int ql,int qr,int dat) {
        if (ql<=L&&R<=qr) {tag[o]=dat,sum[o]=(R-L+1)*tag[o];return;}
        if (ql>R||L>qr) return;
        if (~tag[o]) pushdown(o,L,R);
        Modify(ls,L,mid,ql,qr,dat),Modify(rs,mid+1,R,ql,qr,dat);
        pushup(o);
    }
} T;
inline int read() {
    int ret=0,f=1;char ch=getchar();
    for (; !isdigit(ch); ch=getchar()) if (ch=='-') f=-f;
    for (; isdigit(ch); ch=getchar()) ret=ret*10+ch-48;
    return ret*f;
}
inline void add_edge(int x,int y) {son[++tot]=y,nxt[tot]=lnk[x],lnk[x]=tot;}
void dfs1(int x,int pre) {
    fa[x]=pre,dep[x]=dep[pre]+1,sz[x]=1;
    for (int k=lnk[x]; k; k=nxt[k]) if (son[k]^pre) {
        dfs1(son[k],x);
        sz[x]+=sz[son[k]];
        if (sz[s[x]]<sz[son[k]]) s[x]=son[k];
    }
}
void dfs2(int x,int tp) {
    top[x]=tp,id[x]=++cnt;
    if (s[x]) dfs2(s[x],tp);
    for (int k=lnk[x]; k; k=nxt[k]) if (son[k]^fa[x]&&son[k]^s[x])
        dfs2(son[k],son[k]);
}
inline void Install(int x) {
    int t1=T.sum[1];
    while (top[x]^1) T.Modify(1,1,N,id[top[x]],id[x],1),x=fa[top[x]];
    T.Modify(1,1,N,1,id[x],1);
    printf("%d\n",T.sum[1]-t1);
}
inline void Uninstall(int x) {
    int t1=T.sum[1];
    T.Modify(1,1,N,id[x],id[x]+sz[x]-1,0);
    printf("%d\n",t1-T.sum[1]);
}
int main() {
    N=read();
    for (int i=2; i<=N; i++) add_edge(read()+1,i);
    dfs1(1,0),dfs2(1,1),T.init();
    Q=read();
    while (Q--) {
        scanf("%s",ch);
        if (ch[0]=='i') Install(read()+1);
        else Uninstall(read()+1);
    }
    return 0;
}
从SAS接口到InfiniBand:一张图看懂数据中心硬件‘黑话’(SFF-8643/8644、QSFP112、NDR/HDR/EDR) 本文深入解析数据中心硬件术语,从SAS接口标准(SFF-8643/8644)到速率标识(NDR/HDR/EDR),帮助工程师快速理解关键性能指标。特别对比了PCIe卡规格(HHHL/FHHL)和光模块选择(QSFP112/OSFP),并探讨InfiniBand在高性能网络中的优势,为硬件选型提供实用指南。 阅读详情

相关推荐

iOS马甲包过审实战:如何用5天时间搞定4.3审核(附完整代码混淆方案)

本文提供了一套为期五天的高效实战方案,专门解决iOS应用因重复或抄袭问题而被App Store的4.3条款拒绝的难题。方案涵盖深度分析、代码混淆、资源翻新及环境隔离等系统性步骤,并附有完整的代码混淆示例,旨在帮助开发者在合规框架内重塑应用,显著提升过审成功率。

weixin_29234239的博客 147

NOI 2015 d1t2 洛谷 【P2146】 软件包管理器

Linux用户和OSX用户一定对软件包管理器不会陌生。通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个软件包的安装所依赖的其它软件包),完成所有的配置。ebian/Ubuntu使用的apt-get,Fedora/CentOS使用的yum,以及OSX下可用的homebrew都是优秀的软件包管理器。 你决定设计你自

ATOD 1506

从“烧电路”到“软杀伤”:拆解高功率微波(HPM)让无人机失灵的三种物理效应

本文深度解析高功率微波(HPM)如何通过热效应、电磁效应和非线性效应三种物理机制使无人机失灵。从电子元件的热损伤到系统的电磁干扰,再到电路中的非线性破坏,HPM技术为反无人机系统提供了高效的非动能打击手段。文章还探讨了现代无人机的多层级防护策略与应对方案。

weixin_42531886的博客 253

bzoj4196

开始看lct后觉得链剖真是很水。。。 1 #include<bits/stdc++.h> 2 #define lowbit(a) ((a)&(-(a))) 3 #define l(a) ((a)<<1) 4 #define r(a) ((a)<<1|1) 5 #define clr(a,x) memset(a,x,s...

weixin_34417183的博客 279

SRC漏洞挖掘实战指南:从零入门到月入过万的网络安全副业

网络安全的核心在于识别和修复系统缺陷,其中逻辑漏洞与信息泄露是常见的安全风险。其原理在于应用程序在业务逻辑设计或数据处理过程中存在缺陷,导致未授权访问或敏感数据暴露。掌握这些技术对于构建安全的应用体系至关重要,不仅能有效防范攻击,也为安全研究人员提供了将技术能力变现的合法途径。在漏洞赏金(Bug Bounty)和SRC(安全应急响应中心)等应用场景中,白帽子通过系统化的测试方法,挖掘此类漏洞,既能获得经济回报,又能积累宝贵的实战经验。本文聚焦于逻辑漏洞与信息泄露的实战挖掘技巧,为初学者提供清晰的入门路径和效

weixin_28568819的博客 350

告别切换烦恼!用Parallels Desktop的Host-Only网卡,在macOS上直接访问虚拟机里的公司内网

本文详细介绍了如何在macOS上使用Parallels Desktop的Host-Only网卡直接访问虚拟机内的公司内网,告别频繁切换操作系统的烦恼。通过配置Host-Only网络模式,实现主机与虚拟机的安全高效通信,特别适合需要频繁访问内网资源的IT从业者。文章包含分步指南、自动化脚本和常见问题解决方案,帮助用户优化工作流程。

weixin_28739079的博客 363

(重链剖分)魔法树

(重链剖分)魔法树

汤键的博客 428

【STK】手把手教你利用STK进行光电红外仿真03-STK/EOIR模块属性之二 导弹等目标的EOIR设置

上一节介绍了如何设置传感器的通用属性和空间、光学、光谱、辐射四种专项属性。这一节介绍如果对导弹等目标的EOIR属性进行修改。

weixin_44184852的博客 2203

NOI2015B. 软件包管理器 (Package Manager)

NOI2015B. 软件包管理器 (Package Manager)

yaosichengalpha的博客 333

uniapp [安卓苹果App端] - 实现集成微信一键登录及授权获取用户信息全流程源码,uniApp唤起微信客户端app实现微信授权头像昵称手机号(提供移动应用/开放平台/资质认证/签名/权限申请

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果安卓app,微信一键登录,uniapp项目App端实现微信登录,Uniapp实现微信授权登录,调起微信客户端授权用户信息,uniappapp端微信一键登录打开手机微信app,app端如何唤起用户本机微信应用并授权登陆,如何申请微信一键登录,uniapp实现APP微信登录流程,打开本地微信软件,接入微信登录,UniApp实现微信登录教程,获取头像昵称手机号用户数据,超详细实现微信登录功能,唤起没反应,授权失败,获取

🏆 前端领域优质创作者 1万+

2024全国村级行政边界数据

五级行政区划:村边界数据产品涵盖五级行政区划:(一级行政区)省级行政区共31个其中:(台湾、香港、澳门除外);(二级行政区)地级行政区共334个其中:7个地区、3个盟、30个自治州、294个地级市;(三级行政区)县级行政区共2851个其中:1355个县、117个自治县、49个旗、3个自治旗、363个县级市、962个市辖区、1个林区、1个特区;(四级行政区)乡级行政区共40497个其中:11626个乡、1034个民族乡、20117个镇、7566个街道、151个苏木、1个民族苏木、2个县辖区公所;

J_Giser的博客 3232

[NOI2015] 软件包管理器

通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个软件包的安装所依赖的其它软件包),完成所有的配置。而且,由于你之前的工作,除 00 号软件包以外,在你的管理器当中的软件包都会依赖一个且仅一个软件包,而 00 号软件包不依赖任何一个软件包。注意,安装一个已安装的软件包,或卸载一个未安装的软件包,都不会改变任何软件包的安装状态,即在此情况下,改变安装状态的软件包数为 0。同时,如果想要卸载软件包 b,则必须卸载软件包 a。

m0_61949623的博客 959

基于STM32设计的智能水母投喂器(华为云IOT)_170

本项目利用STM32单片机控制各种传感器和水泵等设备,能够自动检测和调整水温和水质等参数,自动换水,自动供氧等等,充分满足了水母的养殖要求和需要。同时,根据水母喜欢的光环境,添加了RGB氛围灯,以及可以手动控制的喂食器等功能,提升了水母养殖的便利性和趣味性。

8808

树链剖分——BZOJ4196/Luogu2146 [Noi2015]软件包管理器

题面:BZOJ4196 Luogu2146 首先软件包形成了一棵树,然后题中的软件包只有两种状态:装了与没被装 如果要装某个软件包,那么从这个包到根的软件包都要装 如果要卸某个软件包,那么以这个软件包为根的子树软件包都不能装 所以这道题实际要我们干什么:树上修改一条链的值,修改子树的值,求一条链的和,求子树和 然后发现要求的操作和洛谷的树剖模板题几乎一样?! 那么就把Luogu的模板

2333:jzqjzq的博客专栏 516

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

BZOJ[4196][Noi2015]洛谷[2146]软件包管理器

题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=4196 4196: [Noi2015]软件包管理器 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 1874  Solved: 1069 [Submit][Status][Discuss] Description  Li

谁能代表肯德基 401

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

bzoj-4196 NOI-2015 软件包管理器

题意: 扔个现在可以交题的链接:http://www.luogu.org/problem/show?pid=2146 就是给出一个n个点的有根树,和m次操作; 初始时树上所有结点权值均为0; 1操作将根到x结点的所有结点权值置为1,并输出这次修改了多少个元素; 2操作将x结点的子树中所有结点权值置为0,并输出这次修改了多少个元素; n,m 题解: 1操作显然是树链剖分的形式

140142 2925

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

[NOI2015]软件包管理器

题目:BZOJ4196、洛谷P2146、codevs4621、UOJ#128。 题目大意:有一些软件,编号0~n,它们之间有依赖关系,装编号为ai软件先要装编号为i的软件(编号为0的除外),卸载编号为i的软件必须先卸载编号为ai的软件(编号为0的除外)。它们的关系形成树形图。现在有m个任务,每次让你下载或卸载一个软件,问你本次操作一共新下载/卸载了多少软件。 解题思路:树链剖分。用线...

176

BZOJ4196 [Noi2015]软件包管理器(洛谷P2146)

树链剖分 BZOJ题目传送门 洛谷题目传送门 看懂题目后就是比较裸的树剖了。安装就是把x到根节点都改为1,卸载就是把x的子树都改为0。 注意询问的内容。 论10s时限跑了9.9s的快感。 代码: #include&amp;lt;cctype&amp;gt; #include&amp;lt;cstdio&amp;gt; #include&amp;lt;cstring&amp;gt; #include&amp;lt;algorithm&amp

forezxl的博客 452

提示词工程实战:10个技巧让大模型输出质量翻倍

大语言模型正在重塑内容创作、代码开发与数据分析等众多工作流,但其输出质量高度依赖用户输入的指令精度。提示词工程(Prompt Engineering)正是研究如何通过结构化指令引导模型释放潜能的核心方法。从角色设定、示例驱动到思维链、边界约束,每一个技巧都旨在将模糊需求转化为明确指令,从而提升输出的相关性、准确性与可控性。在实际业务中,无论是撰写营销文案、生成行业报告,还是构建智能客服,掌握这些方法都能显著降低返工成本。本文系统拆解了十个经过真实项目验证的提示词技巧,并附赠可直接套用的场景化模板,帮助读者快

weixin_33994429的博客 410

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

http://www.lydsy.com/JudgeOnline/problem.php?id=4196 https://www.luogu.org/problemnew/show/P2146 你决定设计你自己的软件包管理器。不可避免地,你要解决软件包之间的依赖问题。如果软件包A依赖软件包B,那么安装软件包A以前,必须先安装软件包B。同时,如果想要卸载软件包B,则必须卸载软件包A。现在你已...

weixin_33859665的博客 82

BZOJ_P4196 [NOI2015]软件包管理器(树链剖分+dfs序)

BZOJ传送门Linux 用户和 OS X 用户一定对软件包管理器不会陌生。通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个软件包的安装所依赖的其它软件包),完成所有的配置。Debian/Ubuntu 使用的 apt-get,Fedora/CentOS 使用的 yum,以及 OS X 下可用的 homebrew

BeiYu 743

安装和使用新立得软件包管理器

我们可能经常在Debian系Linux发行版使用apt命令来安装/删除/彻底删除软件包,但我们有时候闲着没事干想安装一些好玩的软件时发现使用apt命令一个一个找太麻烦了,或者终端打不开无法在终端里使用apt,而“新立得软件包管理器”就可以完美解决这个问题。以上就是本文章的所有内容,本文仅仅简单介绍了新立得软件包管理器的安装和使用,而新立得软件包管理器能使我们快速便捷地在图形化界面安装/删除/彻底删除软件包。

Windows_优快云的博客 5401

包管理器 | 浅谈几个常用的包管理工具

在前端开发中,npm、pnpm和yarn是三种非常流行的包管理工具。虽然它们的作用都是相同的,但是在实际使用中,它们存在一些不同之处。

青春木鱼的博客 3224

Ubuntu 软件包管理利器 - 新立得 (Synaptic)

Synaptic(中文名:新立得)是 debian 及其衍生版本如 Ubuntu Linux 操作系统的包管理工具 apt 的图形化前端。在早期的时候,Synaptic 几乎是所有基于 Debian Linux 发行版的默认图形化软件包管理器。它被认为是一种用户友好的、易于使用的管理应用程序的方法。...

bluebird_shao的专栏 1万+

包管理器(1)—— 简介

一、包         一个包(Package)(或软件包)通常指的是一个应用程序,它可以是一个GUI应用程序、命令行工具或(其他软件程序需要的)软件库。包本质上是一个存档文件,包含二进制可执行文件、配置文件,有时还包含依赖关系的信息。 二、包管理器         简单来说, 包管理器(Package Manager)(或软件包管理器)是一种工具,

hezhanran的博客 3315

软件包管理器(树链剖分)

Am−1 依赖 Am,而 Am 依赖 A1,则称这 m个软件包的依赖关系构成环),当然也不会有一个软件包依赖自己。根据反馈,用户希望在安装和卸载某个软件包时,快速地知道这个操作实际上会改变多少个软件包的安装状态(即安装操作会安装多少个未安装的软件包,或卸载操作会卸载多少个已安装的软件包),你的任务就是实现这个部分。通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个软件包的安装所依赖的其它软件包),完成所有的配置。

q619718的博客 292
上一篇: [HNOI2008]越狱 洛谷3197 bzoj1008
下一篇: nim游戏详解
ZXfoil
博客等级 码龄9年 29粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值