比赛场次 | 263 |
---|---|
比赛名称 | NOI2015Day1 |
比赛状态 | 已结束比赛成绩 |
开始时间 | 2015-08-01 08:00:00 |
结束时间 | 2015-08-01 13:00:00 |
开放分组 | 全部用户 |
注释介绍 | NOI2015day1,(对题目内容进行了适当修改) |
题目名称 | 软件包管理器 |
---|---|
输入输出 | manager.in/out |
时间限制 | 1500 ms (1.5 s) |
内存限制 | 512 MiB |
测试点数 | 20 简单对比 |
用户 | 结果 | 时间 | 内存 | 得分 |
---|---|---|---|---|
甘罗 | TTAATTTTTTTTTTTTTTTT |
18.170 s | 1.60 MiB | 10 |
FoolMike | WWEEEEEEEEEEEEEEEEEE |
0.647 s | 91.54 MiB | 0 |
你决定设计你自己的软件包管理器。不可避免的,你要解决软件包之间的依赖关系。如果A依赖B,那么安装A之前需安装B,卸载B之前须卸载A。0号软件包不依赖任何软件包。依赖关系不存在环(包括自环)。
你的任务是,求出每次安装、删除操作会改变多少个包的状态。
安装一个已安装的软件包,或者卸载一个未安装的软件包,都不会改变任何软件包的安装状态,即在此情况下,改变安装状态的软件包数为0
每次操作不仅需要计算安装软件包数,还作为操作影响后来的安装/删除
第一行一个整数n,表示软件包的总数。
随后n-1个整数$a_1,a_2,...a_{n-1}$,表示第i个软件包依赖第$a_i$个软件包
接下来一行一个整数q,表示询问数
之后q行,每行一个询问,询问分为两种
install x:表示安装x
uninstall x:表示卸载x
q行,每行一个整数,为第i步操作改变安装状态的软件包数
7 0 0 0 1 1 5 5 install 5 install 6 uninstall 1 install 4 uninstall 0
3 1 3 2 3
一开始所有的软件包都处于未安装状态。
安装5号软件包,需安装0,1,5三个软件包
之后安装6号软件包,只需安装6号软件包。此时安装了0,1,5,6四个软件包。
卸载1号软件包需要卸载1,5,6三个软件包,此时只有0号软件包还处于安装状态
之后安装4号软件包,需安装1,4两个软件包。此时0,1,4处于安装状态
最后,卸载0号软件包会卸载所有的软件包
10 0 1 2 1 3 0 0 3 2 10 install 0 install 3 uninstall 2 install 7 install 5 install 9 uninstall 9 install 4 install 1 install 9
1 3 2 1 3 1 1 1 0 1
1,2:n=5000 q=5000
3,4:n=100000 q=100000 没有卸载操作
5,6,7,8 n=100000,q=100000 依赖关系和操作随机
9-20 n=100000,q=100000 不随机
NOI2015Day1T2