qb#P10024. 春日市集 · 摆摊调度记
春日市集 · 摆摊调度记
春天的周末,河畔社区要办一场两天的“春日手作市集”。 社区的摊主们人人都有唯一一种拿手风格(比如“编织 / 手绘 / 木作 / 烘焙 ……”)。整场市集由总召(编号 0)统筹,其他摊主各自有唯一的直接负责人,就像“组长—组员”的层层关系。你可以把这种上下级关系想成一棵从总召出发的层级树:越靠近总召层级越高,离得越远层级越低。
总召想为“中心展区”凑一支尽可能壮大的队伍,并规定:
-
先确定一位展区负责人(称为“队长”)。这位队长的拿手风格,也就是本展区统一采用的风格。
-
谁能直接进队:凡是在这位队长的下属体系中,并且拿手风格与队长相同的摊主,都能直接进入展区队伍。
-
可以做位置互换来扩军:为了多拉些“同风格”的摊主入队,总召可以重复执行下面的操作任意次:
- 选中两个处在相同层级(到总召的“上级数”相同)的摊主 A 和 B;
- 其中 A 现在在队长的体系里但与队长风格不同;B 不在队长的体系里但与队长风格相同;
- 互换 A 与 B 的位置:他们各自原本带的手工小伙伴(下属)原地不动,跟着 A 或 B 一起“整体搬家”。
你的任务是: 在所有可行的选择队长与互换操作中,尽量让展区队伍人数最多;若能达到最大人数的方案不止一种,要求输出所需互换次数最少的那种。
输入格式
- 第一行两个整数 与 :摊主总数与风格种类数。摊主编号为 ,总召编号为 。
- 第二行包含 个整数 ():第 位摊主的拿手风格编号。
- 接下来 行描述层级关系:第 行()给出一个整数 (),表示摊主 的直接上级是 。保证无环,形成一棵树。
输出格式
输出两个整数 与 :
- :最大可到达的队伍人数(含队长);
- :达到人数 时所需的最小互换次数。
样例
输入
9 3
0 0 2 1 2 0 2 1 2
4
8
1
0
4
1
0
7
输出
4 2
解释: 若选择 4 号为队长(风格 2),他手下本来就有 2 位同风格。再看每个层级:有两位“在队里但不同风格”的摊主,恰好在外面同层各有一位风格 2,可以各换一次,最终队伍共 4 人,且仅需 2 次互换。
数据范围
| 组别 | 分值 | 限制 |
|---|---|---|
| 1 | 12 | 形成“单链”: |
| 2 | 19 | |
| 3 | 27 | 每种风格的总人数 ≤ 10 |
| 4 | 23 | |
| 5 | 19 | 无额外限制() |