1 条题解

  • 0
    @ 2025-11-4 10:38:21

    1. 题意理解

    我们有一个 n×mn \times m 的矩阵,初始全 00

    • 每行有一个按钮,向左转一次,该行所有元素 +1向右转一次,该行所有元素 -1
    • 每列有一个按钮,向左转一次,该列所有元素 +1向右转一次,该列所有元素 -1
    • 给定 kk 个位置 (xi,yi)(x_i, y_i) 和目标值 cic_i,要求最终这些位置的值恰好等于 cic_i
    • 问是否存在一种操作方案(每行、每列可以任意左转或右转若干次,可以是负数次,即反向转),使得所有绿宝石位置满足条件。

    2. 建立数学模型

    设:

    • ii 行的净操作次数rir_i(左转为正,右转为负,即该行整体加 rir_i)。
    • jj 列的净操作次数sjs_j(左转为正,右转为负,即该列整体加 sjs_j)。

    那么矩阵中位置 (i,j)(i, j) 的最终值为: [ a_{i,j} = r_i + s_j ] 因为初始是 00,行操作加 rir_i,列操作加 sjs_j


    3. 约束条件

    对于每个绿宝石 (x,y,c)(x, y, c),要求: [ r_x + s_y = c ] 其中 cc 已知。

    所以问题转化为:

    给定 kk 个形如 rx+sy=cr_x + s_y = c 的方程,问是否存在整数解 (r1,,rn,s1,,sm)(r_1, \dots, r_n, s_1, \dots, s_m)


    4. 方程组的可解性分析

    这是一个线性方程组,变量是 rir_isjs_j,方程数 kk,变量数 n+mn+m

    但方程形式特殊:每个方程只涉及一个 rr 和一个 ss

    我们可以把它看作一个二部图

    • 左部 nn 个节点表示 r1,,rnr_1, \dots, r_n
    • 右部 mm 个节点表示 s1,,sms_1, \dots, s_m
    • 每个条件 rx+sy=cr_x + s_y = c 是连接左部 xx 与右部 yy 的一条边,权值为 cc

    5. 判断有解的方法

    对于二部图的每个连通分量,我们可以任意设定其中一个变量的值,然后沿着边推出其他所有变量的值。

    推导过程
    设连通分量中某点 rp=tr_p = ttt 任意整数),则对于边 (p,q)(p, q)sq=cts_q = c - t;对于边 (q,p)(q, p')rp=csq=c(ct)=(cc)+tr_{p'} = c' - s_q = c' - (c - t) = (c' - c) + t,等等。
    最终整个连通分量的变量都表示为 t+常数t + \text{常数} 的形式。


    6. 出现矛盾的情况

    在推导过程中,如果某条边 (u,v)(u, v) 的权值 cc 与已算出的 rur_usvs_v 不满足 ru+sv=cr_u + s_v = c,则无解。

    具体来说,设连通分量中我们得到: [ r_i = t + \alpha_i, \quad s_j = -!t + \beta_j ] 那么对于边 (i,j)(i, j) 应有: [ (t + \alpha_i) + (-!t + \beta_j) = \alpha_i + \beta_j = c_{ij} ] 这个 αi+βj=cij\alpha_i + \beta_j = c_{ij} 必须成立,与 tt 无关。
    所以只要在设定 t=0t=0 时检查所有边是否满足即可。


    7. 算法步骤(思路)

    1. 构建二部图,节点为行变量 rir_i 和列变量 sjs_j
    2. 用 BFS/DFS 找出每个连通分量。
    3. 对每个连通分量:
      • 任选一个节点(如某个 rar_a),设 ra=0r_a = 0
      • 推导出该分量中所有 rir_isjs_j 的值(相对于 t=0t=0)。
      • 检查该分量中所有边 (i,j)(i, j) 是否满足 ri+sj=cr_i + s_j = c
      • 若不满足,返回 No。
    4. 所有分量都满足则输出 Yes。

    8. 样例验证

    样例 1
    n=2,m=2,k=4n=2, m=2, k=4
    条件: [ r_1 + s_1 = 0,\quad r_1 + s_2 = 0,\quad r_2 + s_1 = 2,\quad r_2 + s_2 = 2 ] 从 r1=0r_1=0s1=0,s2=0s_1=0, s_2=0
    r2+s1=2r_2 + s_1 = 2r2=2r_2=2
    检查 r2+s2=2+0=2r_2 + s_2 = 2+0=2 满足。
    所以 Yes

    样例 2
    条件: [ r_1 + s_1 = 0,\quad r_1 + s_2 = 0,\quad r_2 + s_1 = 2,\quad r_2 + s_2 = 1 ] 从 r1=0r_1=0s1=0,s2=0s_1=0, s_2=0
    r2+s1=2r_2 + s_1=2r2=2r_2=2
    检查 r2+s2=2+0=21r_2 + s_2 = 2+0=2 \neq 1,矛盾。
    所以 No


    9. 结论

    这个问题本质是判断一个特殊的二部图线性系统是否有解,可以通过对每个连通分量赋值并检查一致性来解决,时间复杂度 O(n+m+k)O(n+m+k)

    • 1

    信息

    ID
    4949
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者