插头DP
插头DP:最小表示法
注意到每个数字互不相同。
每个数可以表示成
2
x
3
y
z
2^x3^yz
2x3yz 的形式。
z
z
z 不同的数分别是独立的子问题;对于
z
z
z 相同的数,有限制的是若干
(
x
,
y
)
,
(
x
+
1
,
y
)
,
(
x
,
y
+
1
)
(x,y),(x+1,y),(x,y+1)
(x,y),(x+1,y),(x,y+1) 的三元组,看成格点,就变成了格点涂色问题。
为了方便,将
x
,
y
x,y
x,y 分别等价翻转一下,那么每个三元组是
(
x
,
y
)
,
(
x
−
1
,
y
)
,
(
x
,
y
−
1
)
(x,y),(x-1,y),(x,y-1)
(x,y),(x−1,y),(x,y−1) ,显然可以放在轮廓线上做。
考虑涂色的贡献:令被钦定同色的格子属于一个连通块,没被钦定的单独一个连通块,设这样的连通块有
t
o
t
tot
tot 个,被钦定同色的三元组有
k
k
k 个,那么贡献是
(
−
1
)
k
m
t
o
t
(-1)^km^{tot}
(−1)kmtot 。(本质上就是令被钦定同色的格子同色,其他未被钦定的任意,做容斥。)
具体的,轮廓线时,对于一个正在考虑的各子
(
x
,
y
)
(x,y)
(x,y) ,要么新格子单独一个连通块,要么将其与三元组其他的两个格子的连通块合并,块的联通性可以用最小表示法 hash 。处理块时注意那些被封闭的块。至于
k
k
k 和
t
o
t
tot
tot ,不需要真的枚举,假设当前贡献是
r
e
s
res
res ,若新钦定了一个三元组,令
r
e
s
=
−
r
e
s
res=-res
res=−res 即可;若新封闭了一个连通块,令
r
e
s
=
r
e
s
∗
m
res=res*m
res=res∗m 即可。特别的,初始
r
e
s
=
1
res=1
res=1 。
插头DP。
[20220724NOI训练赛]T2--简要题解
于 2022-07-24 18:40:59 首次发布