luogu#P9786. [ROIR 2020 Day1] 机器人锦标赛

[ROIR 2020 Day1] 机器人锦标赛

题目描述

译自 ROIR 2020 Day1 T4. Олимпиада для роботов ,译者 alpha1022

机器人高速布尔函数计算锦标赛的任务由评委会准备。

机器人的一个任务是一张 mmnn 列的表格,其中每个格子有一个整数权值,且记第 iijj 列的格子的权值为 xi,jx_{i,j}
对于每一列,该列中所有格子的权值组成了一个 0m10\ldots m-1 的排列。换句话说,每列中所有格子的权值互不相同:
iki \ne k,则对于所有的 jjxi,jxk,jx_{i,j} \ne x_{k,j},且有 0xi,j<m0 \le x_{i,j} < m

对于每一列,评委会设置了一个阈值 —— 一个在 [0,m][0,m] 内的非负整数 zjz_j。你需要以所有形如 xi,j<zjx_{i,j} < z_j 的逻辑表达式的值为参数计算布尔函数的值。一个逻辑表达式的值为 11 当且仅当这个表达式成立,否则为 00

在比赛中,选手们需要计算 mm 个布尔函数的值 —— 对每一行计算一次。每个布尔函数以一个非重复单调线性规划(NMLP)定义。

考虑第 ii 行的 NMLP。
这是由 n1n-1 条以 1n11 \ldots n-1 编号的指令组成的一个序列,第 pp 条指令给定三个数:ap,bp,oppa_p, b_p, op_poppop_p 只有两种取值:11 表示与运算,22 表示或运算。
ap,bpa_p,b_p 则是第 pp 个指令的参数,满足 1ap,bp<n+p1 \le a_p,b_p < n+p

考虑一个仅包含 0011 的数组 val[12n1]val[1\ldots 2n-1]。对于 1jn1 \le j \le nval[j]=[xi,j<zj]val[j] = [x_{i,j} < z_j],其中 [P][P] 表示表达式 PP 的值。
val[n+p]val[n+p] 的值通过第 pp 条指令计算。

  • 对于 opp=1op_p = 1val[n+p]=(val[ap] and val[bp])val[n+p] = (val[a_p]\ \texttt{and}\ val[b_p])
  • 对于 opp=2op_p = 2val[n+p]=(val[ap] or val[bp])val[n+p] = (val[a_p]\ \texttt{or}\ val[b_p])

该规划是非重复的,也就是说,对于 p=1n1p = 1\ldots n-1,所有 2n22n-2ap,bpa_p,b_p 的值互不相同。

程序执行的结果即为 val[2n1]val[2n-1]

目前评委会已经准备好了所有的 xi,jx_{i,j},需要由你来确定每一列的阈值才能完整地准备这个任务。
评委会认为一个任务是平衡的,当且仅当所有 mm 行中恰有 ss 行的布尔函数最后得到的结果为 11,其余 msm-s 行得到 00
你的任务即为替评委会找到合适的阈值。

对于此题,可以证明一定存在至少一种选择阈值的方案满足上述条件。

输入格式

第一行,三个整数 n,m,sn,m,s
以下 m(n1)m(n-1) 行,第 i(n1)+p  (1pn1)i \cdot (n-1) + p\;(1 \le p \le n-1) 行包含三个整数 ap,bp,oppa_p,b_p,op_p,表示第 ii 行的第 pp 个操作。
以下 mm 行,每行 nn 个整数,表示所有的 xi,jx_{i,j}

输出格式

输出 nn 个整数 z1,z2,,zn  (0zjm)z_1, z_2, \ldots, z_n\;(0 \le z_j \le m)
如有多解,任意输出一个即可。

4 3 2
1 2 1
3 4 1
5 6 2
1 2 2
3 5 1
4 6 2
1 4 1
2 3 1
5 6 2
0 1 2 2
2 2 1 0
1 0 0 1
0 1 2 3

提示

【样例解释】

在此样例中共有 33 行,你需要令其中恰好两行的函数值为 11,另一行的函数值为 00。 让我们看看第一行的 valval 数组是什么样的。 前四个值通过格子中的权值和阈值计算:

  • val[1]=[x1,1<z1]=[0<0]=0val[1] = [x_{1,1} < z_1] = [0 < 0] = 0
  • val[2]=[x1,2<z2]=[1<1]=0val[2] = [x_{1,2} < z_2] = [1 < 1] = 0
  • val[3]=[x1,3<z3]=[2<2]=0val[3] = [x_{1,3} < z_3] = [2 < 2] = 0
  • val[4]=[x1,4<z4]=[2<3]=1val[4] = [x_{1,4} < z_4] = [2 < 3] = 1

接下来,对第一行执行线性规划:

  • $val[5] = (val[1]\ \texttt{and}\ val[2]) = (0\ \texttt{and}\ 0) = 0$;
  • $val[6] = (val[3]\ \texttt{and}\ val[4]) = (0\ \texttt{and}\ 1) = 0$;
  • $val[7] = (val[5]\ \texttt{or}\ val[6]) = (0\ \texttt{or}\ 0) = 0$。

因此,第一行的函数值为 00。 顺带一提,若我们整理一下这些式子,可得:

$$[((x_{1,1} < z_1)\ \texttt{and}\ (x_{1,2} < z_2))\ \texttt{or}\ ((x_{1,3} < z_3)\ \texttt{and}\ (x_{1,4} < z_4))] $$

类似地,第二行和第三行的函数值分别为

$$[(((x_{2,1} < z_1)\ \texttt{or}\ (x_{2,2} < z_2))\ \texttt{and}\ (x_{2,3} < z_3))\ \texttt{or}\ (x_{2,4} < z_4)] $$

$$[((x_{3,1} < z_1)\ \texttt{and}\ (x_{3,4} < z_4))\ \texttt{or}\ ((x_{3,2} < z_2)\ \texttt{and}\ (x_{3,3} < z_3))] $$

当我们令 z1=0,z2=1,z3=2,z4=3z_1 = 0,z_2 = 1,z_3 = 2,z_4 = 3 时,我们可以得到以下表达式: 第二行:

$$[(((2 < 0)\ \texttt{or}\ (2 < 1))\ \texttt{and}\ (1 < 2))\ \texttt{or}\ (0 < 3)] = 1 $$

第三行:

$$[((1 < 0)\ \texttt{and}\ (1 < 3))\ \texttt{or}\ ((0 < 1)\ \texttt{and}\ (0 < 2))] = 1 $$

请注意这不是唯一的解,可行的解还包括 z1=0,z2=0,z3=3,z4=3z_1 = 0, z_2 = 0, z_3 = 3, z_4 = 3

【数据范围】

对于 100%100\% 的数据,$1 \le n,m \le 3 \cdot 10^5,n \cdot m \le 3 \cdot 10^5,0 \le s \le m,1 \le a_p, b_p \le n+p,0 \le x_{i,j} < m$。
具体数据限制如下表:

子任务编号 限制 分值
11 n2,m103n \le 2,m \le 10^3 1010
22 n2,m105n \le 2,m \le 10^5
33 n10,m2n \le 10,m \le 2
44 xi,j=i1x_{i,j} = i-1 55
55 opp=1op_p=1
66 n100n \le 100 2020
77 每一行的 NMLP 相同 1010
88 - 3030