“拟阵是向量空间的 ‘线性无关’ 概念的推广。” —— 知乎网友
比较多的东西是抄的集训队论文,正确性有保障(无特殊标注即为此类);有些东西从英文文献上翻译而来,可能有误;自己的观点用 “按语” 表明,极可能错误,并且无用。
显然的结论将略去证明。用 ■ \blacksquare ■ 表示证明结束,因为无法实现靠右对齐,只能求助于颜色的醒目。
壹、定义
1.拟阵
拟阵( m a t r o i d \rm matroid matroid)可记为 M = ( U , I ) \mathcal M=(\Bbb U,\mathcal I) M=(U,I),其中 I \mathcal I I 是 U \Bbb U U 上的集族(即 I ⊆ 2 U \mathcal I\subseteq 2^{\Bbb U} I⊆2U 这一幂集),满足
- 遗传性:对于 I ∈ I , J ⊆ I I\in\mathcal I,\;J\subseteq I I∈I,J⊆I 有 J ∈ I J\in\mathcal I J∈I 。
- 基交换性 或 扩张性:对于 I , J ∈ I , ∣ I ∣ < ∣ J ∣ I,J\in\mathcal I,\;|I|<|J| I,J∈I,∣I∣<∣J∣ 有 ∃ x ∈ J ∖ I \exists x\in J\setminus I ∃x∈J∖I 使得 I ∪ { z } ∈ I I\cup\{z\}\in\mathcal I I∪{z}∈I 。
其中 U \Bbb U U 被称为 ground set \text{ground set} ground set(本文中几乎未提及该名称,故不译)。不妨规定 ∣ I ∣ ≠ 0 |\mathcal I|\ne 0 ∣I∣=0,因此 ∅ ∈ I \varnothing\in\mathcal I ∅∈I 。
对于 I ∈ I I\in\mathcal I I∈I,称 I I I 为 独立集,或称 I I I 是独立的。否则称 I I I 为不独立的。
Comment. 如无特殊说明,都认为我们在研究 M = ( U , I ) \mathcal M=(\Bbb U,\mathcal I) M=(U,I) 的性质。
2.基与环
基( b a s i s \rm basis basis)是极大独立集,环( c i r c u i t \rm circuit circuit)是极小非独立集。
Lemma 1. 矩阵中的所有基具有相同的大小。
Corollary 1. 对于不同的环 X , Y X,Y X,Y 和 ∀ e ∈ X ∩ Y \forall e\in X\cap Y ∀e∈X∩Y 有 X + Y − { e } ∉ I X+Y-\{e\}\notin\mathcal I X+Y−{e}∈/I 。
Proof. 显然存在 f ∈ X ∖ Y f\in X\setminus Y f∈X∖Y,设 Z Z Z 为 X ∪ Y X\cup Y X∪Y 中包含 X ∖ { f } X\setminus\{f\} X∖{f} 的最大独立集,因 Y ⊈ Z Y\nsubseteq Z Y⊈Z 得 ∣ Z ∣ < ∣ X + Y − { f } ∣ = ∣ X + Y − { e } ∣ |Z|<|X+Y-\{f\}|=|X+Y-\{e\}| ∣Z∣<∣X+Y−{f}∣=∣X+Y−{e}∣,因为 Z Z Z 是最大的,所以原命题得证。 ■ \blacksquare ■
Corollary 2. 对于 I ∈ I I\in\mathcal I I∈I,若 I ∪ { e } ∉ I I\cup\{e\}\notin\mathcal I I∪{e}∈/I 则 I ∪ { e } I\cup\{e\} I∪{e} 中有唯一的环。
Proof. 若存在两个环 C 1 , C 2 C_1,C_2 C1,C2,显然 e ∈ C 1 ∩ C 2 e\in C_1\cap C_2 e∈C1∩C2,由 corollary 1 \text{corollary 1} corollary 1 知 C 1 + C 2 − { e } C_1+C_2-\{e\} C1+C2−{e} 不独立,与 I I I 是独立集矛盾。 ■ \blacksquare ■
3.秩函数
对于 S ⊆ U S\subseteq\Bbb U S⊆U,定义 秩函数 r ( S ) r(S) r(S) 为 S S S 中极大独立集的大小。 r ( S ) r(S) r(S) 也被称作 S S S 的 秩。
- 有界性: 0 ⩽ r ( S ) ⩽ ∣ S ∣ 0\leqslant r(S)\leqslant |S| 0⩽r(S)⩽∣S∣ 。
- 单调性: ∀ A ⊆ B \forall A\subseteq B ∀A⊆B 有 r ( A ) ⩽ r ( B ) r(A)\leqslant r(B) r(A)⩽r(B) 。
- 次模性( submodular \text{submodular} submodular,也称子模): r ( A ∪ B ) + r ( A ∩ B ) ⩽ r ( A ) + r ( B ) r(A\cup B)+r(A\cap B)\leqslant r(A)+r(B) r(A∪B)+r(A∩B)⩽r(A)+r(B) 。
Proof. 证明 r ( A ∪ { x } ) − r ( A ) ⩽ r ( B ∪ { x } ) − r ( B ) r(A\cup\{x\})-r(A)\leqslant r(B\cup\{x\})-r(B) r(A∪{x})−r(A)⩽r(B∪{x})−r(B) 其中 B ⊆ A B\subseteq A B⊆A 是平凡的。然后从 ⟨ A , A ∩ B ⟩ \langle A,\;A\cap B\rangle ⟨A,A∩B⟩ 开始,将 B ∖ A B\setminus A B∖A 逐个加入 A A A 则得到 ⟨ A ∪ B , A ∩ B ⟩ \langle A\cup B,\;A\cap B\rangle ⟨A∪B,A∩B⟩,加入 A ∩ B A\cap B A∩B 则得到 ⟨ A , B ⟩ \langle A,B\rangle ⟨A,B⟩,在已经加入了 S S S 时,前者在集合 A + S A+S A+S 内增加,后者在 ( A ∩ B ) + S (A\cap B)+S (A∩B)+S 内增加,更大。 ■ \blacksquare ■
4.以秩定义
“我们将拟阵的组合问题转化为秩函数上的代数问题,通过研究秩函数的性质来求得拟阵的性质。” [1]
依据满足上述三条性质的秩函数 r : 2 S ↦ N + r:2^S\mapsto\mathbb{N}^+ r:2S↦N+,我们可以重新定义拟阵 M = ( U , I ) \mathcal M=(\Bbb U,\mathcal I) M=(U,I),其中 I = { I : r ( I ) = ∣ I ∣ } \mathcal I=\{I:r(I)=|I|\} I={I:r(I)=∣I∣} 。
Proof. 遗传性:若
r
(
B
)
=
∣
B
∣
,
A
⊆
B
r(B)=|B|,\;A\subseteq B
r(B)=∣B∣,A⊆B,由 次模性
知
r
(
B
)
⩽
r
(
A
)
+
r
(
B
∖
A
)
r(B)\leqslant r(A)+r(B\setminus A)
r(B)⩽r(A)+r(B∖A),由 有界性
知
r
(
A
)
=
∣
A
∣
r(A)=|A|
r(A)=∣A∣ 。
交换性:反证法,设
B
=
{
b
1
,
b
2
,
…
,
b
∣
B
∣
}
B=\{b_1,b_2,\dots,b_{|B|}\}
B={b1,b2,…,b∣B∣},则
r
(
A
∪
{
b
i
}
)
=
∣
A
∣
r(A\cup\{b_i\})=|A|
r(A∪{bi})=∣A∣ 。利用归纳法证明
r
(
A
∪
{
b
1
,
b
2
,
…
,
b
n
}
)
=
∣
A
∣
r(A\cup\{b_1,b_2,\dots,b_n\})=|A|
r(A∪{b1,b2,…,bn})=∣A∣ 。对
n
>
1
n>1
n>1,取
X
=
A
∪
{
b
1
,
b
2
,
…
,
b
n
−
1
}
,
Y
=
A
∪
{
b
n
}
X=A\cup\{b_1,b_2,\dots,b_{n-1}\},\;Y=A\cup\{b_n\}
X=A∪{b1,b2,…,bn−1},Y=A∪{bn},由 次模性
有
r
(
A
∪
{
b
1
,
b
2
,
…
,
b
n
}
)
+
r
(
A
)
⩽
r
(
X
)
+
r
(
Y
)
r(A\cup\{b_1,b_2,\dots,b_n\})+r(A)\leqslant r(X)+r(Y)
r(A∪{b1,b2,…,bn})+r(A)⩽r(X)+r(Y),由
r
(
A
)
=
r
(
X
)
=
r
(
Y
)
=
∣
A
∣
⩽
r
(
A
∪
{
b
1
,
b
2
,
…
,
b
n
}
)
r(A)=r(X)=r(Y)=|A|\leqslant r(A\cup\{b_1,b_2,\dots,b_n\})
r(A)=r(X)=r(Y)=∣A∣⩽r(A∪{b1,b2,…,bn}) 知归纳法成立。
然而
r
(
B
)
=
∣
B
∣
>
r
(
A
∪
B
)
=
∣
A
∣
r(B)=|B|>r(A\cup B)=|A|
r(B)=∣B∣>r(A∪B)=∣A∣ 违反了 单调性
。
■
\blacksquare
■
贰、线性拟阵和线性表出
按:
“我们线性拟阵是你们图拟阵的老大哥!”
线性拟阵( linear matroid \text{linear matroid} linear matroid)即 U \Bbb U U 为向量集合,而 I = { I ∈ 2 U : dim ( span ( I ) ) = ∣ I ∣ } \mathcal I=\{I\in 2^{\Bbb U}:\dim(\text{span}(I))=|I|\} I={I∈2U:dim(span(I))=∣I∣} 的特殊拟阵。
线性表出( linear representation \text{linear representation} linear representation)即将 U \Bbb U U 内每个元素映射到一个向量上,使得这些向量的线性拟阵得到的 I \mathcal I I 就是原拟阵的独立集集族。
按:作为 O I e r \rm OIer OIer 我并不想去研究向量空间的基域,因此相关内容略写 😏
若拟阵可以被线性表出,问题就变成线性拟阵上的了。
1.均匀拟阵
均匀拟阵( uniform matroid \text{uniform matroid} uniform matroid)为 I = { I : ∣ I ∣ ⩽ k } \mathcal I=\{I:|I|\leqslant k\} I={I:∣I∣⩽k} 。
它可以被线性表出为 k k k 维向量 v i = ( 1 , α i , α i 2 , … , α i k − 1 ) v_i=(1,\alpha_i,\alpha_i^2,\dots,\alpha_i^{k-1}) vi=(1,αi,αi2,…,αik−1),其中 { α i } \{\alpha_i\} {αi} 是两两相异的非零元:超过 k k k 个肯定线性相关,但不超过 k k k 个时,范德蒙德矩阵行列式为 ∏ i < j ( α j − α i ) ≠ 0 \prod_{i<j}(\alpha_j-\alpha_i)\ne 0 ∏i<j(αj−αi)=0,因此线性无关 [2]。
2.图拟阵
图拟阵( graph matroid \text{graph matroid} graph matroid)定义在无向图 G = ( V , E ) G=(V,E) G=(V,E) 上,满足 U = E \Bbb U=E U=E 而 I \mathcal I I 为不构成环的边集的集族。
给 E E E 任意定向,对边 e = ( u , v ) e=(u,v) e=(u,v),向量 v e v_e ve 在第 u u u 维上是 1 1 1,在第 v v v 维上是 − 1 -1 −1 。不难验证其为线性表出。
“图拟阵是正则拟阵;任意的正则拟阵的基的计数都可以通过计算一个关联矩阵的行列式求得,而矩阵树定理是其中的特例。” [1]
注:正则拟阵是可以在 G F ( 2 ) \mathbb{GF}(2) GF(2) 上被线性表出的拟阵。它并不总是图拟阵。
叁、最优化问题
1.最大权独立集
给定函数 ω : U ↦ R \omega:\Bbb U\mapsto\Reals ω:U↦R,求 max I ∈ I ∑ x ∈ I ω ( x ) \max_{I\in\mathcal I}\sum_{x\in I}\omega(x) maxI∈I∑x∈Iω(x) 。显然 ω ( x ) ⩽ 0 \omega(x)\leqslant 0 ω(x)⩽0 可被忽略。
只需将 U \Bbb U U 内元素按照 ω \omega ω 单调不降的顺序排列,然后线性扫描之,可以加入就加入。
Proof. 令
X
=
{
x
1
,
x
2
,
…
,
x
r
}
X=\{x_1,x_2,\dots,x_r\}
X={x1,x2,…,xr} 是真正的最大权独立集,其中
ω
(
x
i
)
\omega(x_i)
ω(xi) 单调不增,记
X
n
=
{
x
1
,
x
2
,
…
,
x
n
}
X_n=\{x_1,x_2,\dots,x_n\}
Xn={x1,x2,…,xn} 。令
S
n
S_n
Sn 为加入第
n
n
n 个元素后得到的独立集,归纳证明
ω
(
S
n
)
⩾
ω
(
X
n
)
\omega(S_n)\geqslant\omega(X_n)
ω(Sn)⩾ω(Xn) 。对
n
⩾
1
n\geqslant 1
n⩾1,设
{
u
}
=
S
n
∖
S
n
−
1
\{u\}=S_n\setminus S_{n-1}
{u}=Sn∖Sn−1,根据 扩张性
有
∃
v
∈
X
n
∖
S
n
−
1
\exists v\in X_n\setminus S_{n-1}
∃v∈Xn∖Sn−1 使得
S
n
−
1
∪
v
∈
I
S_{n-1}\cup v\in\mathcal I
Sn−1∪v∈I,然而根据算法流程
ω
(
u
)
⩾
ω
(
v
)
\omega(u)\geqslant\omega(v)
ω(u)⩾ω(v),根据
X
X
X 的排序方式
ω
(
v
)
⩾
ω
(
x
n
)
\omega(v)\geqslant\omega(x_n)
ω(v)⩾ω(xn),因此
ω
(
S
n
)
=
ω
(
S
n
−
1
∪
{
u
}
)
⩾
ω
(
X
n
−
1
)
+
ω
(
x
n
)
=
ω
(
X
n
)
\omega(S_n)=\omega(S_{n-1}\cup\{u\})\geqslant\omega(X_{n-1})+\omega(x_n)=\omega(X_n)
ω(Sn)=ω(Sn−1∪{u})⩾ω(Xn−1)+ω(xn)=ω(Xn) 。
■
\blacksquare
■
按:我怎么觉得后文定义 closure \text{closure} closure 之后这东西就会相当显然呢?至少感性理解就会相当显然。
Comment. 其中 ω ( S ) \omega(S) ω(S) 是 ∑ x ∈ S ω ( x ) \sum_{x\in S}\omega(x) ∑x∈Sω(x) 的缩写。之后的问题中也可能这样简记。
2.最小权基
给定函数 ω : U ↦ R \omega:\Bbb U\mapsto\Reals ω:U↦R,求 min ∣ I ∣ = r ( I ) = r ( U ) ∑ x ∈ I ω ( x ) \min_{|I|=r(I)=r(\Bbb U)}\sum_{x\in I}\omega(x) min∣I∣=r(I)=r(U)∑x∈Iω(x) 。
流程与 最大权独立集
一样,只是不能去掉
ω
(
x
)
⩾
0
\omega(x)\geqslant 0
ω(x)⩾0 的。
3.最大最小带权环
很遗憾,最大带权环在 ω = 1 \omega=1 ω=1 的图拟阵上可以判定哈密顿路的存在性,因此是 NP-hard \text{NP-hard} NP-hard 。
最小带权环可以规约到 Even Set \text{Even Set} Even Set 问题上,而 Even Set \text{Even Set} Even Set 是 NPC \text{NPC} NPC 问题,因此最小带权环也是 NP-hard \text{NP-hard} NP-hard 。
肆、拟阵运算
1.对偶拟阵
M ∗ = ( U , I ∗ ) \mathcal M^*=(\Bbb U,\mathcal I^*) M∗=(U,I∗) 是 M = ( U , I ) \mathcal M=(\mathbb{U},\mathcal I) M=(U,I) 的 对偶拟阵( dual matroid \text{dual matroid} dual matroid),其中 I ∗ = { I : ∃ B is basis of M , B ⊆ U ∖ I } \mathcal I^*=\{I:\exists B\text{ is basis of }\mathcal M,\;B\subseteq\mathbb{U}\setminus I\} I∗={I:∃B is basis of M,B⊆U∖I} 。
换句话说,记 B ( M ) \mathcal{B(M)} B(M) 为 M \mathcal M M 的所有 b a s i s \rm basis basis 的集族,则 B ( M ∗ ) = { U − I : I ∈ B ( M ) } \mathcal{B(M^*)}=\{\Bbb U-I:I\in\mathcal{B(M)}\} B(M∗)={U−I:I∈B(M)} 。
我们首先应该说明它是一个拟阵。
Proof. 直接证明稍有困难;用 以秩定义
方法可行。
r
∗
(
S
)
=
max
{
∣
S
∖
B
∣
:
B
∈
B
(
M
)
}
=
∣
S
∣
−
min
{
∣
S
∩
B
∣
:
B
∈
B
(
M
)
}
=
∣
S
∣
−
r
(
U
)
+
max
{
∣
B
∩
(
U
∖
S
)
∣
:
B
∈
B
(
M
)
}
=
∣
S
∣
−
r
(
U
)
+
r
(
U
∖
S
)
\begin{aligned} r^*(S)&=\max\{|S\setminus B|:B\in\mathcal{B(M)}\}\\ &=|S|-\min\{|S\cap B|:B\in\mathcal{B(M)}\}\\ &=|S|-r(\Bbb U)+\max\{|B\cap(\Bbb U\setminus S)|:B\in\mathcal{B(M)}\}\\ &=|S|-r(\Bbb U)+r(\Bbb U\setminus S) \end{aligned}
r∗(S)=max{∣S∖B∣:B∈B(M)}=∣S∣−min{∣S∩B∣:B∈B(M)}=∣S∣−r(U)+max{∣B∩(U∖S)∣:B∈B(M)}=∣S∣−r(U)+r(U∖S)
有界性、单调性显然。只需验证次模性。不难发现此时 ∣ S ∣ − r ( U ) |S|-r(\Bbb U) ∣S∣−r(U) 可消去,只需证 “次模函数在取补集后仍是次模的”。而这是 t r i v i a l \rm trivial trivial 的。 ■ \blacksquare ■
Bonus. 图拟阵的对偶拟阵是图拟阵,当且仅当原图为平面图,此时对偶拟阵是对偶图的图拟阵 [8]。
Theorem 1. 如果 M \mathcal M M 在域 F \mathbb F F 上可以被线性表出,则 M ∗ \mathcal M^* M∗ 也可以 [8]。
Proof. 设
M
\mathcal M
M 的基的大小为
m
m
m,设其
ground set
\text{ground set}
ground set 大小为
n
n
n 。不妨令其被
m
×
n
m\times n
m×n 矩阵
A
A
A 线性表出,其中
A
=
[
I
m
×
m
∣
B
m
×
(
n
−
m
)
]
A=[I^{m\times m}\;|\;B^{m\times(n-m)}]
A=[Im×m∣Bm×(n−m)]
其中
I
I
I 是单位矩阵。列向量的线性无关指明了独立性。那么对偶拟阵可以用下面的矩阵线性表出
A
∗
=
[
B
T
∣
I
(
n
−
m
)
×
(
n
−
m
)
]
A^*=[B^{\sf T}\;|\;I^{(n-m)\times(n-m)}]
A∗=[BT∣I(n−m)×(n−m)]
可以检验一下。不妨设基
S
S
S 涉及
A
A
A 中
I
m
×
m
I^{m\times m}
Im×m 的右侧和
B
m
×
(
n
−
m
)
B^{m\times(n-m)}
Bm×(n−m) 的左侧。设其形式为
A
=
[
I
0
B
11
B
12
0
I
B
21
B
22
]
,
A
∗
=
[
B
11
T
B
21
T
I
0
B
12
T
B
22
T
0
I
]
A=\left[\begin{array}{c:c:c:c} I & 0 & B_{11} & B_{12}\\ \hdashline 0 & I & B_{21} & B_{22} \end{array}\right], \quad A^*=\left[\begin{array}{c:c:c:c} B_{11}^{\sf T} & B_{21}^{\sf T} & I & 0\\ \hdashline B_{12}^{\sf T} & B_{22}^{\sf T} & 0 & I \end{array}\right]
A=[I00IB11B21B12B22],A∗=[B11TB12TB21TB22TI00I]
其中 S S S 独立性源于中间两个块,即 det ( I ) det ( B 11 ) ≠ 0 \det(I)\det(B_{11})\ne 0 det(I)det(B11)=0 。
一目了然, A ∗ \mathcal A^* A∗ 的前若干列和后若干列线性无关,即 U ∖ S \Bbb U\setminus S U∖S 在 M ∗ \mathcal M^* M∗ 中独立。另一方面, A ∗ A^* A∗ 的列向量维度为 ( n − m ) (n{-}m) (n−m),因此 U ∖ S \Bbb U\setminus S U∖S 一定是最大独立集,即基。 ■ \blacksquare ■
按:在这里你可以看到一次它的应用。可能也仅此一次了。
2.删除与收缩
对于 M = ( U , I ) \mathcal M=(\Bbb U,\mathcal I) M=(U,I) 和 S ⊆ U S\subseteq\Bbb U S⊆U,定义 M \mathcal M M 删除 S S S 的拟阵为 ( U ∖ S , I ′ ) (\Bbb U\setminus S,\;\mathcal I') (U∖S,I′) 其中 I ′ = { I : I ∈ I , I ⊆ U ∖ S } \mathcal I'=\{I:I\in\mathcal I,\;I\subseteq\Bbb U\setminus S\} I′={I:I∈I,I⊆U∖S},记为 M ∖ S \mathcal M\setminus S M∖S 。定义 M \mathcal M M 收缩 S S S 的拟阵为 ( M ∗ ∖ S ) ∗ (\mathcal M^*\setminus S)^* (M∗∖S)∗,记为 M / S \mathcal M/S M/S 。1
它甚至可以直接被定义为 I M / S = { I ⊆ U ∖ B : I ∪ B ∈ I } \mathcal I_{\mathcal M/S}=\{I\subseteq\Bbb U\setminus B:I\cup B\in\mathcal I\} IM/S={I⊆U∖B:I∪B∈I},其中 B B B 是 S S S 的一组基 [7]。
前者即不再考虑这些元素。后者等价于 S S S 内的基必选——在 M ∗ \mathcal M^* M∗ 中删除 S S S,也就是不能不选嘛。
当然也可以从
r
r
r 函数的角度考虑。注意
r
M
(
H
)
=
r
M
∖
S
(
H
)
r_{\mathcal M}(H)=r_{\mathcal M\setminus S}(H)
rM(H)=rM∖S(H),由此得到
r
M
/
S
(
H
)
=
∣
H
∣
−
r
M
∗
(
U
∖
S
)
+
r
M
(
U
∖
S
∖
H
)
=
∣
H
∣
−
(
∣
U
∖
S
∣
−
r
(
U
)
+
r
(
S
)
)
+
(
∣
U
∖
S
∖
H
∣
−
r
(
U
)
+
r
(
S
∪
H
)
)
=
r
(
S
∪
H
)
−
r
(
S
)
(
H
⊆
U
∖
S
)
\begin{aligned} r_{\mathcal M/S}(H) &=|H|-r_{\mathcal M^*}(\Bbb U\setminus S)+r_{\mathcal M}(\Bbb U\setminus S\setminus H)\\ &=|H|-(|\Bbb U\setminus S|-r(\Bbb U)+r(S))+(|\Bbb U\setminus S\setminus H|-r(\Bbb U)+r(S\cup H))\\ &=r(S\cup H)-r(S)\qquad(H\subseteq\Bbb U\setminus S) \end{aligned}
rM/S(H)=∣H∣−rM∗(U∖S)+rM(U∖S∖H)=∣H∣−(∣U∖S∣−r(U)+r(S))+(∣U∖S∖H∣−r(U)+r(S∪H))=r(S∪H)−r(S)(H⊆U∖S)
3.极小元
M \mathcal M M 经过 d e l e t i o n \rm deletion deletion 和 c o n t r a c t i o n \rm contraction contraction 得到的任意拟阵 M ′ \mathcal M' M′ 是 M \mathcal M M 的 极小元。
“不严谨的说,拟阵的极小元可以看成原拟阵的一个局部特征。” [1]
4.拟阵并
对于给定的 k k k 个拟阵 M i = ( U i , I i ) ( 1 ⩽ i ⩽ k ) \mathcal M_i=(\Bbb U_i,\mathcal I_i)\;(1\leqslant i\leqslant k) Mi=(Ui,Ii)(1⩽i⩽k),定义这 k k k 个 拟阵的并 为 M = ( U , I ) \mathcal M=(\Bbb U,\mathcal I) M=(U,I),其中 U = ⋃ i = 1 k U i , I = { ⋃ j = 1 k I j : ∀ j , I j ∈ I j } \Bbb U=\bigcup_{i=1}^{k}\Bbb U_i,\;\mathcal I=\{\bigcup_{j=1}^{k}I_j:\forall j,\;I_j\in\mathcal I_j\} U=⋃i=1kUi,I={⋃j=1kIj:∀j,Ij∈Ij} 。
其遗传性与扩张性显然,即该运算是封闭的。
更详细的内容已被讨论过 [5],我因为还没学会,就不写出来了。
伍、拟阵交
按:
匈牙利算法才是万物的起源!二分图匹配既是拟阵交,又是拟阵并。
由于 拟阵交
在拟阵上并不封闭,所以不列在 拟阵运算
当中。
例子:设 U = { 1 , 2 , 3 } \Bbb U=\{1,2,3\} U={1,2,3},设 I 1 \mathcal I_1 I1 的基为 { 1 , 3 } , { 2 , 3 } \{1,3\},\{2,3\} {1,3},{2,3}(仅 1 , 2 1,2 1,2 共线的线性拟阵),设 I 2 \mathcal I_2 I2 的基为 { 1 , 2 } , { 2 , 3 } \{1,2\},\{2,3\} {1,2},{2,3}(仅 1 , 3 1,3 1,3 共线的线性拟阵),不难发现独立集 { 1 } \{1\} {1} 和 { 2 , 3 } \{2,3\} {2,3} 之间失去了
扩张性
。
l l l-拟阵交( l -matroid intersection l\text{-matroid intersection} l-matroid intersection):给定 M i = ( U , I i ) ( 1 ⩽ i ⩽ l ) \mathcal M_i=(\Bbb U,\mathcal I_i)\;(1\leqslant i\leqslant l) Mi=(U,Ii)(1⩽i⩽l),求 max { I : ∀ j ∈ [ 1 , l ] , I ∈ I j } \max\{I:\forall j\in[1,l],\;I\in\mathcal I_j\} max{I:∀j∈[1,l],I∈Ij} 。
Theorem 2. 3 3 3-拟阵交问题是 NPC \text{NPC} NPC 问题 [2]。
Proof. 二分图上哈密顿路问题是 NPC \text{NPC} NPC 的。在两部点上,分别定义拟阵为 “独立集即不共用该部的顶点的边集”,再与图拟阵求交,就可以求出二分图上哈密顿路,因此 3 3 3-拟阵交问题是 NPC \text{NPC} NPC 的。 ■ \blacksquare ■
所以我们只学会下面这个 P P P 的 2 2 2-拟阵交问题就行啦!
Theorem 3.(最大最小定理) max { ∣ I ∣ : I ∈ I 1 ∩ I 2 } = min S ⊆ U { r 1 ( S ) + r 2 ( U ∖ S ) } \max\{|I|:I\in\mathcal{I}_1\cap\mathcal{I}_2\}=\min_{S\subseteq\Bbb U}\{r_1(S)+r_2(\Bbb U\setminus S)\} max{∣I∣:I∈I1∩I2}=minS⊆U{r1(S)+r2(U∖S)} 。
LHS ⩽ RHS \text{LHS}\leqslant\text{RHS} LHS⩽RHS 是显然的,因为 ∣ I ∩ S ∣ ⩽ r 1 ( S ) |I\cap S|\leqslant r_1(S) ∣I∩S∣⩽r1(S) 。而可以取等的证明就是构造性算法。
1.强基交换定理
定义 闭包( closure \text{closure} closure)算子 clos ( A ) = { x ∈ U : r ( A ∪ { x } ) = r ( A ) } \text{clos}(A)=\{x\in\Bbb U:r(A\cup\{x\})=r(A)\} clos(A)={x∈U:r(A∪{x})=r(A)} 。或者你也可以像线性空间一样,定义成 span \text{span} span 。
不必多说其性质——不难发现它就是 A A A 的基的 “不可扩张” 元。直观理解上正确的性质都是易证的。
Theorem 4.(强基交换定理) 设 A , B ∈ I , ∣ A ∣ = ∣ B ∣ A,B\in\mathcal I,\;|A|=|B| A,B∈I,∣A∣=∣B∣,对于 ∀ x ∈ A ∖ B \forall x\in A\setminus B ∀x∈A∖B 若 A ∪ { x } ∉ I A\cup\{x\}\notin\mathcal I A∪{x}∈/I 则存在 y ∈ B ∖ A y\in B\setminus A y∈B∖A 使得 A − { x } + { y } A-\{x\}+\{y\} A−{x}+{y} 和 B − { y } + { x } B-\{y\}+\{x\} B−{y}+{x} 都是独立的 [6]。
Proof. 由
corollary 2
\text{corollary 2}
corollary 2 得
B
+
{
x
}
B+\{x\}
B+{x} 包含唯一的环
C
⊇
{
x
}
C\supseteq\{x\}
C⊇{x} 。显然
x
∈
clos
(
C
−
{
x
}
)
x\in\text{clos}(C-\{x\})
x∈clos(C−{x}),因此
clos
(
(
A
∪
C
)
∖
{
x
}
)
=
clos
(
A
∪
C
)
⊇
clos
(
A
)
\text{clos}((A\cup C)\setminus\{x\})=\text{clos}(A\cup C)\supseteq\text{clos}(A)
clos((A∪C)∖{x})=clos(A∪C)⊇clos(A),因此存在
A
′
⊆
(
A
∪
C
)
∖
{
x
}
A'\subseteq(A\cup C)\setminus\{x\}
A′⊆(A∪C)∖{x} 使得
A
′
∈
I
,
∣
A
′
∣
=
∣
A
∣
A'\in\mathcal I,\;|A'|=|A|
A′∈I,∣A′∣=∣A∣ 。由 交换性
,存在
y
∈
A
′
∖
(
A
−
{
x
}
)
y\in A'\setminus(A-\{x\})
y∈A′∖(A−{x}) 使得
A
−
{
x
}
+
{
y
}
∈
I
A-\{x\}+\{y\}\in\mathcal I
A−{x}+{y}∈I 。
注意到 A ′ ∖ ( A − { x } ) ⊆ ( ( A ∪ C ) ∖ { x } ) ∖ ( A − { x } ) ⊆ C ∖ { x } A'\setminus(A-\{x\})\subseteq((A\cup C)\setminus\{x\})\setminus(A-\{x\})\subseteq C\setminus\{x\} A′∖(A−{x})⊆((A∪C)∖{x})∖(A−{x})⊆C∖{x},所以 B + { x } − { y } B+\{x\}-\{y\} B+{x}−{y} 把 B + { x } B+\{x\} B+{x} 中的唯一环 C C C 拆掉了,所以 B − { y } + { x } B-\{y\}+\{x\} B−{y}+{x} 也独立。 ■ \blacksquare ■
2.交换图
对于 M = ( U , I ) \mathcal M=(\mathbb{U},\mathcal{I}) M=(U,I) 和 I ∈ I I\in\mathcal I I∈I,定义 交换图 D M ( I ) D_{\mathcal M}(I) DM(I) 为 X = I , Y = U ∖ I {\frak X}=I,\;{\frak Y}=\Bbb U\setminus I X=I,Y=U∖I 的二部图,其中 x ∈ X x\in\frak X x∈X 和 y ∈ Y y\in\frak Y y∈Y 之间有边当且仅当 I − { x } + { y } ∈ I I-\{x\}+\{y\}\in\mathcal I I−{x}+{y}∈I 成立。
Lemma 2. 若 I , J ∈ I I,J\in\mathcal I I,J∈I,且 ∣ I ∣ = ∣ J ∣ |I|=|J| ∣I∣=∣J∣,则 D M ( I ) D_{\mathcal M}(I) DM(I) 中存在 I ∖ J I\setminus J I∖J 和 J ∖ I J\setminus I J∖I 的完美匹配 [6]。
Proof. 不妨令独立集大小均不超过
∣
I
∣
|I|
∣I∣,则
I
,
J
I,J
I,J 是两个基。根据 强基交换定理
,
∃
x
∈
I
∖
J
,
y
∈
J
∖
I
\exists x\in I\setminus J,\;y\in J\setminus I
∃x∈I∖J,y∈J∖I 使得
I
−
{
x
}
+
{
y
}
I-\{x\}+\{y\}
I−{x}+{y} 是基。因此
⟨
x
,
y
⟩
\langle x,y\rangle
⟨x,y⟩ 可匹配,然后递归
J
′
=
J
−
{
y
}
+
{
x
}
J'=J-\{y\}+\{x\}
J′=J−{y}+{x} 即可。
■
\blacksquare
■
Theorem 5. 若 I ∈ I , ∣ I ∣ = ∣ J ∣ I\in\mathcal I,\;|I|=|J| I∈I,∣I∣=∣J∣ 且 D M ( I ) D_{\mathcal M}(I) DM(I) 中存在唯一的 I ∖ J I\setminus J I∖J 和 J ∖ I J\setminus I J∖I 的完美匹配,则 J ∈ I J\in\mathcal I J∈I 。
Proof. 令 P P P 是唯一的匹配,将 P P P 中的边定向为 U ∖ I \Bbb U\setminus I U∖I 到 I I I,其余反之。匹配唯一说明不存在有向环,用拓扑序重编号(编号小的点指向编号大的点)。设 P = { ⟨ y i , x i ⟩ } P=\{\langle y_i,x_i\rangle\} P={⟨yi,xi⟩},其中 y i ∈ J ∖ I y_i\in J\setminus I yi∈J∖I 。重排使得 x i → y j ( i < j ) x_i\to y_j\;(i<j) xi→yj(i<j) 不存在边。
假设 J J J 不独立,取环 C ⊆ J C\subseteq J C⊆J 与最小的 i i i 使得 y i ∈ C y_i\in C yi∈C,这样的 i i i 显然存在。此时 ∀ y ∈ C ∖ { y i } \forall y\in C\setminus\{y_i\} ∀y∈C∖{yi},因为 y y y 的实际位置比 y i y_i yi 更大,因此 x i → y x_i\to y xi→y 不存在边,即 I − { x i } + y ∉ I I-\{x_i\}+y\notin\mathcal I I−{xi}+y∈/I,即 C ∖ { y i } ⊆ clos ( I ∖ { x i } ) C\setminus\{y_i\}\subseteq\text{clos}(I\setminus\{x_i\}) C∖{yi}⊆clos(I∖{xi}) 。此时有 y i ∈ clos ( C ∖ { y i } ) ⊆ clos ( I ∖ { x i } ) y_i\in\text{clos}(C\setminus\{y_i\})\subseteq\text{clos}(I\setminus\{x_i\}) yi∈clos(C∖{yi})⊆clos(I∖{xi}),这与 ⟨ x i , y i ⟩ \langle x_i,y_i\rangle ⟨xi,yi⟩ 是交换图里的边矛盾。 ■ \blacksquare ■
3.拟阵交算法
定义 交换图 D M 1 , M 2 ( I ) D_{\mathcal{M}_1,\mathcal{M}_2}(I) DM1,M2(I) 为 X = I , Y = U ∖ I {\frak X}=I,\;{\frak Y}=\Bbb U\setminus I X=I,Y=U∖I 的有向二部图,其中 x ∈ X x\in\frak X x∈X 和 y ∈ Y y\in\frak Y y∈Y 之间有 ⟨ x , y ⟩ \langle x,y\rangle ⟨x,y⟩ 边当且仅当 I − { x } + { y } ∈ I 1 I-\{x\}+\{y\}\in\mathcal I_1 I−{x}+{y}∈I1 成立,有 ⟨ y , x ⟩ \langle y,x\rangle ⟨y,x⟩ 边当且仅当 I − { x } + { y } ∈ I 2 I-\{x\}+\{y\}\in\mathcal I_2 I−{x}+{y}∈I2 。
初始令
I
=
∅
I=\varnothing
I=∅ 。每次令
X
i
=
{
x
∉
I
:
I
∪
{
x
}
∈
I
i
}
(
i
=
1
,
2
)
X_i=\{x\notin I:I\cup\{x\}\in\mathcal I_i\}\;(i=1,2)
Xi={x∈/I:I∪{x}∈Ii}(i=1,2),然后在
D
M
1
,
M
2
(
I
)
D_{\mathcal M_1,\mathcal M_2}(I)
DM1,M2(I) 中找到
X
1
X_1
X1 到
X
2
X_2
X2 的最短路
P
P
P,然后令
I
=
I
⊕
P
I=I\oplus P
I=I⊕P,这里
⊕
\oplus
⊕ 表示对称差。直到找不到路径。此时就得到了最大的
∣
I
∣
|I|
∣I∣,以及 最大最小定理
中的
S
=
{
z
:
z
can reach
X
2
}
S=\{z:z\text{ can reach }X_2\}
S={z:z can reach X2} 。
3.1.独立性
令最短路 P = { y 0 , x 1 , y 1 , x 2 , y 2 , … , x t , y t } P=\{y_0,x_1,y_1,x_2,y_2,\dots,x_t,y_t\} P={y0,x1,y1,x2,y2,…,xt,yt},令 J = { y 1 , y 2 , … , y t } ∪ ( I ∖ { x 1 , x 2 , … , x t } ) J=\{y_1,y_2,\dots,y_t\}\cup(I\setminus\{x_1,x_2,\dots,x_t\}) J={y1,y2,…,yt}∪(I∖{x1,x2,…,xt}) 。可以得到 ∣ I ∣ = ∣ J ∣ |I|=|J| ∣I∣=∣J∣,且 I ∖ J I\setminus J I∖J 和 J ∖ I J\setminus I J∖I 在 D M 1 ( I ) D_{\mathcal M_1}(I) DM1(I) 里有唯一完美匹配(在只保留 X → Y \frak X\to Y X→Y 边的图上;因为是最短路)。
由 theorem 5 \text{theorem 5} theorem 5 即得 J ∈ I 1 J\in\mathcal I_1 J∈I1 。又因为 P P P 最短可知 y i ∉ X 1 ( 1 ⩽ i ⩽ t ) y_i\notin X_1\;(1\leqslant i\leqslant t) yi∈/X1(1⩽i⩽t) 即 I ∪ { y i } ∉ I 1 I\cup\{y_i\}\notin\mathcal I_1 I∪{yi}∈/I1 即 r 1 ( I ∪ J ) = r 1 ( I ) r_1(I\cup J)=r_1(I) r1(I∪J)=r1(I) 。由于 I ∪ { y 0 } ∈ I 1 I\cup\{y_0\}\in\mathcal I_1 I∪{y0}∈I1 故 J ∪ { y 0 } ∈ I 1 J\cup\{y_0\}\in\mathcal I_1 J∪{y0}∈I1,而 J ∪ { y 0 } = I ⊕ P J\cup\{y_0\}=I\oplus P J∪{y0}=I⊕P 。
同理,令 J = I ⊕ P ⊕ { y t } J=I\oplus P\oplus\{y_t\} J=I⊕P⊕{yt} 则 J ∈ I 2 J\in\mathcal I_2 J∈I2,由 r 2 ( I ∪ J ) = r 2 ( I ) r_2(I\cup J)=r_2(I) r2(I∪J)=r2(I) 得 J ∪ { y t } ∈ I 2 J\cup\{y_t\}\in\mathcal I_2 J∪{yt}∈I2 。 ■ \blacksquare ■
3.2.最大最小
先证明 r 1 ( S ) ⩽ ∣ I ∩ S ∣ r_1(S)\leqslant|I\cap S| r1(S)⩽∣I∩S∣ 。反证法。设 r 1 ( S ) > ∣ I ∩ S ∣ r_1(S)>|I\cap S| r1(S)>∣I∩S∣,根据定义即 ∃ x ∈ S ∖ I \exists x\in S\setminus I ∃x∈S∖I 使得 ( I ∩ S ) ∪ { x } ∈ I 1 (I\cap S)\cup\{x\}\in\mathcal I_1 (I∩S)∪{x}∈I1 。由于 x ∈ S x\in S x∈S 即 x x x 可到达 X 2 X_2 X2,必然有 x ∉ X 1 x\notin X_1 x∈/X1 即 I ∪ { x } ∉ I 1 I\cup\{x\}\notin\mathcal I_1 I∪{x}∈/I1 。
由 独立性
知
I
∪
{
x
}
I\cup\{x\}
I∪{x} 存在唯一环
C
⊇
{
x
}
C\supseteq\{x\}
C⊇{x} 。由
(
I
∩
S
)
∪
{
x
}
∈
I
1
(I\cap S)\cup\{x\}\in\mathcal I_1
(I∩S)∪{x}∈I1 知
∃
y
∈
C
∖
(
I
∩
S
)
∖
{
x
}
\exists y\in C\setminus(I\cap S)\setminus\{x\}
∃y∈C∖(I∩S)∖{x} 使得
I
−
{
y
}
+
{
x
}
∈
I
1
I-\{y\}+\{x\}\in\mathcal I_1
I−{y}+{x}∈I1 。
上式说明 y → x y\to x y→x 边存在,因此 y y y 可到达 X 2 X_2 X2,与 y ∈ C ∖ S y\in C\setminus S y∈C∖S 矛盾(注意 C ⊆ I ∪ { x } C\subseteq I\cup\{x\} C⊆I∪{x} 哦)。
然后证明 r 2 ( U ∖ S ) ⩽ ∣ I ∖ S ∣ r_2(\mathbb{U}\setminus S)\leqslant|I\setminus S| r2(U∖S)⩽∣I∖S∣ 。反证法。 ∃ x ∈ U ∖ ( I ∪ S ) \exists x\in\Bbb U\setminus(I\cup S) ∃x∈U∖(I∪S) 使得 ( I ∖ S ) ∪ { x } ∈ I 2 (I\setminus S)\cup\{x\}\in\mathcal I_2 (I∖S)∪{x}∈I2, 而 x ∉ S x\notin S x∈/S 可知 I + { x } ∉ I 2 I+\{x\}\notin\mathcal I_2 I+{x}∈/I2 。接下来的证明步骤与前者类似。 ■ \blacksquare ■
3.3.复杂度
寻找增广路的复杂度是 O ( r 2 n ) \mathcal O(r^2n) O(r2n) 其中 r = min { r 1 ( U ) , r 2 ( U ) } r=\min\{r_1(\Bbb U),r_2(\Bbb U)\} r=min{r1(U),r2(U)} 。一般而言,建立交换图时所需的 “独立性查询” 的复杂度更高。
我们还有更好的 没有应用价值的 上界:增广路径长度和是
O
(
∣
I
∣
log
∣
I
∣
)
\mathcal O(|I|\log|I|)
O(∣I∣log∣I∣) 的,其中
I
I
I 是最大公共独立集 [3]。
图拟阵交的高效算法已被探索过 [4]。
4.带权拟阵交
注:这一节 O n e I n D a r k \sf OneInDark OneInDark 不会证明。快 a t at at 你身边的数学巨佬来解答吧!🤪
类似于 最优化问题
:给定
ω
:
U
↦
R
\omega:\Bbb U\mapsto\Reals
ω:U↦R 求
max
{
∑
x
∈
I
ω
(
x
)
:
I
∈
I
1
∩
I
2
}
\max\{\sum_{x\in I}\omega(x):I\in\mathcal I_1\cap\mathcal I_2\}
max{∑x∈Iω(x):I∈I1∩I2} 。在该问题下,我们可以假定
ω
(
x
)
>
0
\omega(x)>0
ω(x)>0;事实上我们可以限定
∣
I
∣
|I|
∣I∣ 的值,见本节末。
使用带权的 最大最小定理
max
I
∈
I
1
∩
I
2
∑
x
∈
I
ω
(
x
)
=
min
ω
1
,
ω
2
{
max
{
ω
1
(
I
)
:
I
∈
I
1
}
+
max
{
ω
2
(
I
)
:
I
∈
I
2
}
}
\max_{I\in\mathcal I_1\cap\mathcal I_2}\sum_{x\in I}\omega(x)=\min_{\omega_1,\omega_2}\big\{\max\{\omega_1(I):I\in\mathcal I_1\}+\max\{\omega_2(I):I\in\mathcal I_2\}\big\}
I∈I1∩I2maxx∈I∑ω(x)=ω1,ω2min{max{ω1(I):I∈I1}+max{ω2(I):I∈I2}}
其中 ω 1 , ω 2 \omega_1,\omega_2 ω1,ω2 是两个 U ↦ R \Bbb U\mapsto\Reals U↦R 的函数满足 ∀ x ∈ U , ω 1 ( x ) + ω 2 ( x ) = ω ( x ) \forall x\in\Bbb U,\;\omega_1(x)+\omega_2(x)=\omega(x) ∀x∈U,ω1(x)+ω2(x)=ω(x) 。它被提及了,但没有被证明 [1]。
在算法实现中,对于每轮增广,在交换图 D M 1 , M 2 ( I ) D_{\mathcal M_1,\mathcal M_2}(I) DM1,M2(I) 中令 ⟨ x , y ⟩ \langle x,y\rangle ⟨x,y⟩ 的边权为
w ( x , y ) = ω ( x ) − ω ( y ) + Φ ( x ) − Φ ( y ) w(x,y)=\omega(x)-\omega(y)+\Phi(x)-\Phi(y) w(x,y)=ω(x)−ω(y)+Φ(x)−Φ(y)
令 ⟨ y , x ⟩ \langle y,x\rangle ⟨y,x⟩ 的边权为 w ( y , x ) = Φ ( y ) − Φ ( x ) w(y,x)=\Phi(y)-\Phi(x) w(y,x)=Φ(y)−Φ(x) 。这个 Φ ( x ) \Phi(x) Φ(x) 就是势能函数,可类比最小费用流的 d i j k s t r a \rm dijkstra dijkstra 方法。在每次迭代结束后,令 Φ ( x ) \Phi(x) Φ(x) 为 X 1 X_1 X1 到 x x x 的最小距离即可。特别地,认为超级源点(向每个 X 1 X_1 X1 内点连边的点)到每个点都存在极大容量的边(大于 ∑ ω ( i ) \sum \omega(i) ∑ω(i) 但非正无穷,即存在相对大小关系)。
此时的增广路是 X 1 X_1 X1 到 X 2 X_2 X2 的最短路径(最小化路径上边权和),若有多个则最小化边的数量。
这个方法可以不基于 最大最小定理
完成正确性证明,且边权被证明是非负的,因此可以使用
d
i
j
k
s
t
r
a
\rm dijkstra
dijkstra 最短路算法 [6]。找增广路的复杂度因此仍然是
O
(
n
3
)
\mathcal O(n^3)
O(n3) 的。
“ K M \rm KM KM 就是一种带权拟阵交。” —— Rainybunny \textsf{Rainybunny} Rainybunny
按: K M \rm KM KM 相较于匈牙利算法,复杂度(上界)没有变化,和这个刚好对应上了。
Corollary 3. 在迭代的时候 ω ( I ) \omega(I) ω(I) 的增量是越来越小的 [6]。
事实上,任意时刻得到的 I I I 都是 I 1 ∩ I 2 \mathcal I_1\cap\mathcal I_2 I1∩I2 中大小为 ∣ I ∣ |I| ∣I∣ 的独立集中权值最大的 [6]。
Comment. 论文 [6] 有一处错误,应为未进行代码实现所致:在交换图中, X 1 X_1 X1 的出边和 X 2 X_2 X2 的入边不能被忽略,否则无法进行 Φ ( x ) \Phi(x) Φ(x) 的正确更新。
陆、例题
被删掉的 R G RG RG 边不能使图不连通,这就是图拟阵的对偶。因此是拟阵问题。
对偶并不是代码实现,只是证明其拟阵性。因此该问题可以用带权拟阵交解决。
#include <cstdio>
#include <algorithm> // Almighty XJX yyds!!
#include <cstring> // oracle: ZXY yydBUS!!!
#include <cctype> // rainybunny root of the evil.
#include <numeric>
#include <utility>
using llong = long long;
# define rep(i,a,b) for(int i=(a); i<=(b); ++i)
# define drep(i,a,b) for(int i=(a); i>=(b); --i)
# define rep0(i,a,b) for(int i=(a); i!=(b); ++i)
inline int readint(){
int a = 0, c = getchar(), f = 1;
for(; !isdigit(c); c=getchar()) if(c == '-') f = -f;
for(; isdigit(c); c=getchar()) a = a*10+(c^48);
return a*f;
}
const int MAXN = 105, INF = 4e6;
int w[MAXN][MAXN], pre[MAXN];
using PII = std::pair<int,int>;
PII dis[MAXN];
void dijkstra(const int &n){
static bool vis[MAXN];
memset(vis+1,false,n);
rep(_,1,n){
int i = 0;
rep(j,1,n) if(!vis[j] && (!i || dis[j] < dis[i])) i = j;
vis[i] = true;
rep(j,1,n) if(w[i][j] != INF){
PII to = PII(dis[i].first+w[i][j],dis[i].second+1);
if(dis[j] > to) dis[j] = to, pre[j] = i;
}
}
}
namespace ufs{
int fa[MAXN], cnt;
void init(const int &n){
std::iota(fa+1,fa+n+1,1), cnt = n;
}
inline int find(int a){
if(fa[a] == a) return a;
return fa[a] = find(fa[a]);
}
void merge(int a, int b){
if(find(a) != find(b))
fa[find(a)] = find(b), -- cnt;
}
}
struct Edge { int a, b, w, col; };
Edge e[MAXN]; bool chosen[MAXN]; int n, m;
void initUfs(const int &expel){
ufs::init(n);
rep(i,1,m) if(!chosen[i] && e[i].col != expel)
ufs::merge(e[i].a,e[i].b);
}
int phi[MAXN]; bool outer[MAXN];
bool augment(int& ans){
rep(i,1,m) std::fill_n(w[i]+1,m,INF);
rep(i,1,m) dis[i] = PII(INF-phi[i],0), pre[i] = 0;
memset(outer+1,false,m); // clear
rep(i,1,m) if(!chosen[i]){
chosen[i] = true, initUfs(1), chosen[i] = false;
if(ufs::cnt == 1){
dis[i] = PII(-e[i].w-phi[i],0);
rep(j,1,m) if(chosen[j]) // these must be linked!
w[j][i] = e[j].w-e[i].w+phi[j]-phi[i];
}
else if(ufs::cnt == 2) rep(j,1,m) // link edges for I_1
if(chosen[j] && e[j].col != 1 // not expelled!
&& ufs::find(e[j].a) != ufs::find(e[j].b))
w[j][i] = e[j].w-e[i].w+phi[j]-phi[i];
chosen[i] = true, initUfs(2), chosen[i] = false;
if(ufs::cnt == 1){
outer[i] = true; // exit
rep(j,1,m) if(chosen[j]) w[i][j] = phi[i]-phi[j];
}
else if(ufs::cnt == 2) rep(j,1,m) // link edges for I_2
if(chosen[j] && e[j].col != 2 // not expelled!
&& ufs::find(e[j].a) != ufs::find(e[j].b))
w[i][j] = phi[i]-phi[j]; // original value = 0
}
dijkstra(m); int best = 0;
rep(i,1,m){ // even for unreachable nodes
dis[i].first = (phi[i] += dis[i].first);
if(outer[i] && (!best || dis[best] > dis[i])) best = i;
}
if(!best || dis[best].first >= (INF>>1)) return false;
for(int i=best; i; i=pre[i]){
chosen[i] = !chosen[i];
if(chosen[i]) ans -= e[i].w;
else ans += e[i].w; // not abandoned
}
return true;
}
int ans[MAXN];
int main(){
n = readint(), m = readint();
rep(i,1,m){
static char buf[4];
e[i].a = readint(), e[i].b = readint();
ans[m] += (e[i].w = readint());
scanf("%s",buf); // color
if(*buf == 'G') e[i].col = 0; // universal
else if(*buf == 'R') e[i].col = 1;
else if(*buf == 'B') e[i].col = 2;
}
drep(i,m-1,1){
ans[i] = ans[i+1]; // copy
if(!augment(ans[i])){
memset(ans+1,-1,i<<2);
break;
}
}
rep(i,1,m) printf("%d\n",ans[i]);
return 0;
}
Reference
[1] 杨乾澜. 浅谈拟阵的一些拓展及其应用: I O I 2018 \rm IOI2018 IOI2018 中国国家队候选队员论文[EB/OL]. private-link.
[2] 好地方bug. 拟阵及应用[EB/OL]. zhuanlan.zhihu.com/p….
[3] William H , Cunningham. Improved Bounds for Matroid Partition and Intersection Algorithms[J]. SIAM J. Comput.,1986,15(4). 10.1137/0215066.
[4] Gabow H N , Stallmann M . Efficient Algorithms for Graphic Matroid Intersection and Parity (Extended Abstract)[C]// Automata, Languages and Programming, 12th Colloquium, Nafplion, Greece, July 15-19, 1985, Proceedings. 1985. 10.1007/BFb0015746.
[5] zghtyarecrenj. 从拟阵基础到 Shannon 开关游戏[EB/OL]. luogu.com.cn/blog/z….
[6] Brezovec C , Gérard Cornuéjols, Glover F . Two algorithms for weighted matroid intersection[J]. Mathematical Programming, 1986, 36(1):39-53. 10.1007/BF02591988.
[7] Hao Su. Polyhedral techniques in combinatorial optimization: Lecture 9[EB/OL]. theory.stanford.edu/~j….
[8] Boyle E . Advanced Combinatorial Optimization: Lecture 8: Matroids[EB/OL]. math.mit.edu/~g….
英文名为 deletion \text{deletion} deletion 和 contraction \text{contraction} contraction,论文 [1] 作者未找到标准翻译。 ↩︎