(学军集训)毛皮立方体(furcube)

题意

有一块长宽都为 N N N 的正方形毛皮,它被分为 N × N N × N N×N 个单位格子,每个格子上填着一个小于 M M M 的自然数,其中第 i i i 行第 j j j 列的格子上的数字是 A i , j A_{i,j} Ai,j
现在这块正方形毛皮上的很多数字已经破损,只能看清 K K K 个格子里的数字。但你知道这些数字满足,每行每列的数字之和模 M M M 的值全部相等。
求这个正方形毛皮上的数字有多少种可能的情况。两种情况被视为不同,当且仅当
存在一个格子在两种方案中所填的数字不同。输出答案对 1 0 9 + 7 10^{9} + 7 109+7 取模后的值。

对于所有数据,满足 1 ≤ N ≤ 1 0 9 , 0 ≤ K ≤ 1 0 6 , 10 ≤ M ≤ 1 0 9 1 \le N \le 10^{9}, 0 \le K \le 10^{6}, 10 \le M \le 10^{9} 1N109,0K106,10M109,所有给出的二元组 ( i , j ) (i, j) (i,j) 互不相同。

题解

直接在正方形上不好做(考场上容斥想到自闭),考虑对于行列和的限制,把每行每列看作一个点,每个点看作一条连向其所在行和列的边,对于已经确定权值的点直接在其对应行列上记下,于是问题转化为确定一些边的权值,使各个点权加上其连边边权和都为 0 0 0(考场上想到类似的东觉得不可做就弃了)。

假设已知行列分别的和 x x x,先考虑虑一个连通块,按照一般的套路,先考虑其为一棵树的情况。容易发现,要么无解要么有唯一解。如何判断是否有解呢?结合建图的定义,这个连通块之所以会与其他点隔离,是因为其对应的行和列与其列和行之间都没有连边,即对应格子上都有值。考虑把其对应的行、列平移到左上角的矩形,利用有值的格子,可列出关于 x x x的一个同于方程 a i x = b i ( m o d m ) a_ix=bi( mod m) aix=bi(modm) ,满足次方程的任意一个 x x x都能使左上的矩形存在填数方案(可理解为在树上一次确定每一个点后,由于总和是合法的,最后一个点一定是 0 0 0),故满足方程与有解是等价的。而对于不在树上的其他边,随便乱取都不会影响是否有解。

于是对于每个联通块列出一个同于方程,合并一下可求出解的个数,再乘上可乱选的边的方案数即可。注意到在找连通块时要求效率是 O ( K ) O(K) O(K)的,发现当 n > k n>k n>k时整个图一定联通,特判即可;否则用链表维护每个点是否选过,用bfs求出,效率是 O ( k + n ) O(k+n) O(k+n)的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值