#P16665. [CSPro 25] 通信系统管理

[CSPro 25] 通信系统管理

背景

洛谷的测试数据仅供民间交流使用,非官方测试数据。官方评测链接:https://www.cspro.org/

题目描述

你负责管理一个计算机通信系统。

nn 台计算机接入了该系统,编号为 1n1 \sim n,它们之间可以互相发送数据。

由于设备条件限制,机器之间不能任意多地发送数据。每两台机器之间均有一个“每日可用额度”的限制,单位为 MB/day,表示这两台机器每日可以互相发送的数据量(双方各自向对方发送的数据量之和)的最大值。

最初,任意两台机器的每日可用额度均为 00。为了能发送数据,机器管理者需要向你申请额度。每个申请形如 u v x yu\ v\ x\ y 的格式,表示机器 uuvv 的每日可用额度增大 xx MB/day,持续 yy 天(即从申请当天开始至申请后第 y1y - 1 天内有效,从第 yy 天开始失效)。不同申请的效果是可以叠加的。

定义每台机器的“通信主要对象”为当前时刻与该机器的每日可用额度最大的机器(如果有并列,则取其中编号最小的机器);如果一台机器与任何机器的每日可用额度均为 00,则称其为“通信孤岛”,并认为其没有“通信主要对象”;如果两台机器 xxyy 互为“通信主要对象”,则称它们是一个“通信对”。

每天开始时,你都会先接受若干个额度申请,你需要依次处理这些申请;而后,你将接收到若干个查询某台机器的“通信主要对象”的请求;最后,你可能还希望求出此时的“通信孤岛”和“通信对”各有多少。

请你编写一段程序来实现上述任务。

输入格式

从标准输入读入数据。

第一行:2 个正整数 n,mn, m,表示机器数和天数。

接下来 3m3m 行,每两行描述一天中的事件,格式如下:

  • 第 1 行:首先是一个非负整数 kik_i,表示当天额度申请的数量。接下来有 4ki4k_i 个非负整数,依次描述每一个额度申请,格式如题面中所述。
  • 第 2 行:首先是一个非负整数 lil_i,表示当天查询“通信主要对象”的数量。接下来有 lil_i 个正整数,依次表示查询的机器编号,保证编号在 [1,n][1, n] 范围内。
  • 第 3 行:2 个整数 pi,qip_i, q_i,取值均为 0011,分别表示当天是否要查询“通信孤岛”和“通信对”的数量。其中 pi=1p_i = 1 表示需要查询“通信孤岛”的数量,pi=0p_i = 0 表示不需要查询;qiq_i 的含义同理。

输出格式

输出到标准输出。

对于每个查询分别输出一行,一个非负整数表示该查询的答案。

查询按照天数顺序输出,对于同一天内的查询,先按照输入顺序输出所有查询“通信主要对象”的答案,再依次输出查询“通信孤岛”和“通信对”的答案(如果当天需要查询的话)。

如果某台被查询“通信主要对象”的机器是“通信孤岛”,认为查询结果为 00

3 3
2 1 2 2 3 1 3 3 2
1 1
0 0
1 2 3 3 1
2 1 2
0 1
0
2 1 3
1 1
3
3
3
1
2
0
1
1

提示

子任务

A=i=1mkiA = \sum_{i=1}^{m} k_iB=i=1mliB = \sum_{i=1}^{m} l_i

  • 子任务 1(20 分):满足 n,m1000n, m \leq 1000A,B2000A, B \leq 2000
  • 子任务 2(10 分):满足 pi=qi=0p_i = q_i = 0
  • 子任务 3(10 分):满足 li=qi=0l_i = q_i = 0
  • 子任务 4(15 分):满足 li=0l_i = 0
  • 子任务 5(10 分):满足 k1=Ak_1 = A,对于所有额度申请均满足 y=my = m
  • 子任务 6(15 分):满足 对于所有额度申请均满足 y=my = m
  • 子任务 7(20 分):无特殊性质。

对于 100% 的数据,1n,m1051 \leq n, m \leq 10^51A,B2×1051 \leq A, B \leq 2 \times 10^51u,vn1 \leq u, v \leq n1x1091 \leq x \leq 10^91ym1 \leq y \leq m

所有额度申请均满足 uvu \neq v