拟阵学习笔记(各处抄的,未完)
昨天 CMD round 要用♿ 不会就来学了
🐒🐧🏄 🤖🎪👻
基础定义性质
拟阵和基、环
定义 1.1
给定全集 \(U\),\(U\) 和一个 \(U\) 上的集族 \((U,F)\) 被称作拟阵当:
\(U\) 中的元素叫做边,\(F\) 中的元素 \(S\in F\) 叫做独立集。
第二条叫做遗传性质,第三条叫做交换性质。
定义拟阵的基为极大独立集,环为极小非独立集。
引理 1.1
拟阵的所有基大小相等。
证明:显然小的基可以通过交换性质变大,由于交换性质。
定理 1.1
对于两组不同的基 \(A,B\),\(\forall x\in A-B,\exists y\in B-A,\text{s.t.} A-\{x\}+\{y\}\) 也是一组基。
证明:考虑独立集 \(A-\{x\}\)(由遗传性质知道)和 \(B\) 的交换性质。那么 \(y\in B-(A-\{x\})= B-A\)。
定义 1.2
给定拟阵 \((U,F)\),对于任意集合 \(S\subseteq U\),记秩函数为 \(S\) 子集的极大独立集大小。根据引理 \(1.1\),这些 \(S\) 的基(在拟阵 \((S,\{S'\mid S'\subseteq S,S'\in F\})\) 上应用)相等。
性质 1.1
有界性:\(\forall S\subseteq U,0\le r(S)\le |S|\)。
单调性:\(\forall A\subseteq B\subseteq U,r(A)\le r(B)\)
次模性:\(\forall A,B\subseteq U,r(A\cup B)+r(A\cap B)\le r(A)+r(B)\)
下面证明第三条性质。
记 \(Z_{S}\) 为 \(S\) 上的基。
不妨设 \(Z=Z_{A\cap B},Z_{A\cup B}\) 是从 \(Z\) 交换扩充而来。分割 \(Z_{A\cup B}\) 为 \(Z'=Z_{A\cup B}\cap (A\cap B)\)和\(E_{A}=Z_{A\cup B}\cap (A-B),E_B=Z_{A\cup B}\cap(B-A)\)。
由构造知道,\(Z\subseteq Z'\),又 \(Z\) 是极大的,故 \(Z=Z'\)。
此时
定义 1.3
拟阵是二元组 \((U,F)\),其中 \(U\) 是全集,\(F=\{A\mid r(I)=I\}\) 是集族,\(r\) 是满足秩函数性质的函数。
引理1.2
上述定义等价于定义 1.1 。
证明:
\(0\le r(0)\le 0\),故 \(r(0)=0,\varnothing \in F\)。
遗传性:对于 \(B\in F,A\subseteq B\),\(|B|=r(B)\le r(A)+r(B-A)\),而 \(r(A)\le |A|,r(B-A)=|B-A|,|A|+|B-A|=|B|\),故两者同时取上界,故 \(r(A)=|A|,A\in F\)。
交换性:设 \(A,B\in F,|A|<|B|\)。
反证:设已有 \(\forall b\in B,r(A\cup \{b_{1:n}\})=|A|\),则:
而 \(r(A)<r(B)\le r(A\cup B)\),矛盾。证毕。
因此,可以通过秩函数定义拟阵。
性质 1.2
1.设 \(X,Y\) 是 \((U,F)\) 的不同环,\(\forall e\in X\cap Y\),存在环 \(C\subseteq X\cup Y-\{e\}\)
证明:
设 \(f\in X-Y\)。反证,设 \(X\cup Y-\{e\}\in F\)。由于 \(X\) 是环,\(X-\{f\}\in F\) 。
设 \(X\cup Y\) 中最大的包含\(X-\{f\}\) 的独立集是 \(Z\),而 \(Y\not\subseteq Z\),即至少有一个元素 \(\in Y,\not\in Z\)。
故 \(|Z|\le |X\cup Y-\{f\}|-1\le |X\cup Y|-2<|X\cup Y-\{e\}|\) ,而 \(|Z|\) 是最大的独立集,故 \(X\cup Y-\{e\}\not\in F\),矛盾。
2.设 \(B\) 是 \((U,F)\) 的基, \(\forall e\not\in B\),\(B\cup\{e\}\) 包含唯一环。
反证。若包含环 \(C_1,C_2\),这两个环都必定包含 \(e\)。由上可知 \(C_1\cup C_2-\{e\}\) 有环,即 \(B\) 有环。不成立。
几种特殊拟阵
定义 2.1
设有限全集为 \(U\),\(U\) 中的边 \(e\) 附有一个同一域上的向量 \(v_e\),并且这些向量维数相同。
设集族 \(F\),\(S\in F\) 当且仅当向量组 \(\{v_e\mid e\in S\}\) 线性无关。
此时称 \((U,F)\) 是线性拟阵。
引理 2.1
\((U,F)\) 是拟阵。
证明:
显然 \(\varnothing \in F\),且一个线性无关向量组任何子向量组都线性无关。
若 \(A,B\in F,|A|<|B|\),则 \(\{v_e\mid e\in A\}\) 张出空间的维数是 \(|A|\),\(\{v_e\mid e\in B\}\) 张出空间的维数是 \(|B|\)。
由于 \(|A|<|B|\),必然存在 \(e'\in B-A,\) \(\{v_e\mid e\in A\}\) 不能线性表出 \(e'\)。那么 \(A\cup e'\in F\)。
定义 2.2
构造一矩阵 \(M\),列向量是所有全集中的向量 \(v_e\)。
此时称 \(M\) 可以线性表出 \((U,F)\)。并且 \(M\) 的秩和 \((U,F)\) 的秩相等。
定义 2.3
定义均匀拟阵:
设有限全集为 \(U\),\(F=\{S\mid S\subseteq U, |S|\le k\}\)。
不难验证这是拟阵。
性质 2.1
均匀拟阵在 \(GF(p)(p>n)\) 下是线性拟阵。
证明:设向量 \(v_{e_i}=(1,\alpha_i,\alpha_i^2,\dots,\alpha_i^{k-1})\),其中 \(\alpha_i\) 为两两不同的 \(GF(p)\) 中的非零元。
-什么是 \(GF(p)\)?
-有 \(p\) 个元素的有限域(Galois Field)
那么存在这个矩阵。只需证明:向量组大小不超过 \(k\) 当且仅当他们线性无关。
首先,如果向量组大小超过 \(k\),他们一定线性相关,因为维数只有 \(k\)。
显然只需考虑大小等于 \(k\) 的向量组。
考虑以其为列向量矩阵,是范德蒙德矩阵;
\(\operatorname{det}(A)\neq 0\) 当且仅当 \(\alpha_i\) 两两不同,而这被满足了。这就说明这些向量线性无关。
定义 2.4
对于一个无向图 \((V(G),E(G))\),定义全集为 \(U=E(G)\),边集 \(S\) 属于 \(F\) 的充要条件是生成子图 \((V(G),S)\) 无环,即是生成森林。
此时称 \((U,F)\) 为图拟阵。
性质 2.2
图拟阵 \((U,F)\) 是拟阵。
证明:空集和遗传显然满足。
下面证明满足交换性质。
设 \(A,B\in F,|A|<|B|\),则 \((V(G),A)\) 的连通块数是 \(n-|A|\),\((V(G),B)\) 的连通块数是 \(n-|B|\)。则 \(n-|A|>n-|B|\),那么 \(B\) 中存在一条边 \(e'\) 连接 \((V(G),A)\) 中两个连通块,连上之后不会出现环。那么 \((V(G),A\cup \{e'\})\) 无环。那么 \(A\cup \{e'\}\in S\)。
性质 2.3
图拟阵在任何域中均可被线性表出(当然所以图拟阵是线性拟阵)。
证明:
对于一条边 \((u,v)\),构造向量 \((v_1,v_2,\dots,v_n)\),其中 \(v_u=1,v_v=-1\),其他均为 \(0\)。
对于一个带圈生成子图 \((V(G),A)\),遍历圈,如果正向访问到(\(e_i=(u,v)\) 从 \(u\) 到 \(v\))就赋权系数 \(\alpha_i=1\),否则 \(\alpha_i=-1\)。没有遍历到的 \(\alpha_i=0\)。
容易验证此时每个点都被访问了两遍,一个正的一个负的,抵消得到 \(\sum v_e\alpha_e =\bf0\)。
而不带圈的图如果线性相关,如果去掉系数为 \(0\) 的边向量,总有一个点只连接了一条边,它的贡献不可能被抵消,所以不带圈的图一定不线性相关。
注意到我们仅仅使用了单位元,单位元的逆元和零元,所以以上过程对任意域成立。
定义 2.5
给定一二分图,设左/右部点为 \(U\),\(F=\{A\mid A\subseteq U,A\text{ 可以被一组匹配覆盖}\}\)。则称 \((U,F)\) 为横截拟阵。
性质 2.4
横截拟阵是拟阵。
空集和遗传性显然。
设 \(A,B\in F,|A|<|B|\)。
从一个点 \(u\in B\) 开始,找出匹配点,再回来到 \(A\) 中某个点再去匹配点;如此交替下去直到不能进行。若成环,则删去环;
由于 \(|A<|B|\),存在一个点这样的路一定在 \(B\) 中开始,\(B\) 的匹配点结束。此时找到了增广路,就可以把 \(A\) 加一个左部点进去。
拟阵上的算法
拟阵贪心
算法 3.1
设有一拟阵 \((U,F)\)。
1.令初始解集 \(S\) 为 \(\varnothing\)。
2.循环:找到最小权值的未加入解集且能保证解集加上他独立的边 \(x\) 并 \(S\cup\{x\}\to S\)。
3.若不能找到,退出循环,输出 \(S\)。
定理 3.1
上述算法得到的解集为最小带权基。
证明:设 \(X\) 为 \((U,F)\) 的最小带权基。
设 \(X=\{x_1,x_2,\dots,x_r\},x_i\le x_{i+1}\)。归纳证明 $w(S)\le w(X) $。
设 \(S_i\) 为第 \(i\) 步得到的结果,\(X_i=\{x_1,x_2,\dots x_i\}\)。
显然 \(S_0\) 和 \(X_0\) 满足。下面认为 \(w(S_{i-1})\le w(X_{i-1})\)。
设 \(u=S_i-S_{i-1}\),则根据交换性质,\(\exists v\in X_i,\text{s.t. }S_{i-1}\cup \{v\}\in F\),而 \(w(x_i)\ge w(v)\ge w(u)\),所以 \(w(S_i)\le w(X_i)\)。
不难发现,这是 Kruskal 算法。
这也说明了我们线性基从小到大插入的正确性。
注:似乎可以证明非拟阵则贪心不正确。
可以规约得到拟阵最小/大带权环都是多项式时间不可解的。
拟阵交
定义 3.1
对于拟阵 \(M=(U,F)\),定义其对偶拟阵 \(M^*=(U,F^*)\),其中 \(F^*=\{A\mid \exists B\text{ is base}\subseteq U-A\}\)。
性质 3.1
对偶拟阵是拟阵。
这里我们依靠定义 1.3,依托秩函数证明。
这里证明几条公理。
有界性:\(\because r(U)\ge r(U-A),r^*(A)=|A|-r(U)+r(U-A)\le|A|\)
单调性:若 \(|A|<|B|\),\(r^*(B)-r^*(A)=|B|-|A|+r(U-B)-r(U-A)\ge |B|-|A|+|U-B|-|U-A|=0\)。
次模性:设 \(A,B\in U\),则:
定义 3.2
删除:
设 \(M(U,F)\) 为一拟阵,\(A\subseteq U\),定义 \(M-A=(U-A,\{B\mid B\in F\cap (U-A)\})\)
容易验证,\(M-A\) 是拟阵。而 \(r_{M-A}=r\)。
收缩:定义 \(M/A\) 为 \((M^*-A)^*\)。
发现就是“强制考虑 \(A\) 的一组基的拟阵”。
在图拟阵中,这个操作的意思是边收缩,即合并两个顶点。
说明 3.1
拟阵求交。设有二拟阵 \(M_1(U,F_1),M_2(U,F_2)\)。
\((U,F_1\cap F_2)\) 不一定是拟阵。拟阵交算法解决的是最大公共独立集问题,即 \(\max(|F|\mid F\in F_1\cap F_2)\)。
可以规约得到,超过 2 个的拟阵交多项式时间不可解。
现在研究 \(2\) 拟阵交。
定理 3.2
最小最大定理。
\(\max(F)=\min_{A\subseteq U}(r_1(A)+r_2(U-A))\).
先证明 \(\le\)。
接下来给出 \(\ge\) 的构造性证明。
定义 3.3
定义集合的闭包算子:对于 \(A\subseteq U,cl(A)=\{e\in U\mid r(A\cup \{e\})=r(A)\}\)。
性质 3.2
1.若 \(A\subseteq B \Rightarrow cl(A)\subseteq cl(B)\)。
证明:
\(\forall e\in cl(A)\),\(r(B\cap\{e\})+r(A)= r((A\cup\{e\})\cap B)+r(B\cup \{e\})\le r(A\cup \{e\})+r(B)\)。
那么 \(r(B\cap\{e\})\le r(B)\),而 \(r(B\cap\{e\})\ge r(B)\),故 \(r(B\cap\{e\})= r(B)\),\(e\in cl(B)\)。
2.\(\forall e\in cl(A),cl(A)=cl(A\cup\{e\})\)
证明:
\(cl(A)\subseteq cl(A\cup\{e\})\),只需证明 \(cl(A\cup\{e\})\subseteq cl(A)\)。类似地,设 \(f\in cl(A\cup\{e\})\),则
则 \(r(A\cup \{f\})\ge r(A\cup \{e,f\})\),而 \(r(A\cup \{f\})\le r(A\cup \{e,f\})\),则 \(r(A\cup \{f\})= r(A\cup \{e,f\})\)。
则 \(r(A\cup \{f\})=r(A),f\in cl(A)\)。
3.\(cl(cl(A))=cl(A)\)
显然。
定理 3.3
羟基强基交换定理。
对于两组不同的基 \(A,B\),\(\forall x\in A-B,\exists y\in B-A,\text{s.t.} A-\{x\}+\{y\},B-\{y\}+\{x\}\) 都是基。
证明:
\(B+\{x\}\) 包含唯一环 \(C\),且 \(x\in C\)。
而 \(x\in cl(C-\{x\})\),则 \(x\in cl((A\cup C)-\{x\})=cl(A\cup C)\)。
由于 \(A\) 是基, \(U=cl(A)=cl(A\cup C)=cl((A\cup C)-\{x\})\)。故 \(cl((A\cup C)-\{x\})\) 有一个基,记为 \(A'\)。
根据交换,\(\exists y\in A'-(A-\{x\}),\text{s.t.} A-\{x\}+\{y\}\in F\),即是基。
而由于 \(A'-(A-\{x\})\subseteq ((A\cup C)-\{x\})-(A-\{x\})\subseteq C-\{x\}\),\(\exists y\in C-\{x\},\text{s.t.}A-\{x\}+\{y\}\in F\)(是基)。由于 \(C\) 是环, \(B-\{y\}+\{x\}\) 也是基。
证毕。
定义 3.4
对于拟阵 \(M(U,F)\),\(A\in F\),定义交换图 \(D_M(A)\) 是二分图,左部点集是 \(A\),右部点集是 \(U-A\),连接 \(x\) 和 \(y\) 的边存在当 \(A-\{x\}+\{y\}\in F\)。
定理 3.4
设 \(A\in F,|A|=|B|,B\in F\),则 \(D_M(A)\) 中存在左部点 \(A-B\) 和右部点 \(B-A\) 的完美匹配。
构造拟阵 \(M'(U,F'),F'=\{e\mid e\in F,|e|\le |A|\}\)。显然这是拟阵,又显然 \(D_{M'}(A)=D_M(A)\)。那么 \(A,B\) 都是 \(M'\) 的基。
取 \(x\in B-A\),根据羟基交换定理, \(\exists y\in A-B\),\(A-\{y\}+\{x\},B-\{x\}+\{y\}\in F\)。那么 \((y,x)\) 边存在。取此为匹配,并令 \(B-\{x\}+\{y\}\to B\)。如此可证明。
定理 3.5
设 \(A\in F,|A|=|B|\),\(D_M(A)\) 中存在左部点 \(A-B\) 和右部点 \(B-A\) 的唯一完美匹配,则 \(B\in F\)。
证明:
令此唯一完美匹配为 \(N\)。将 \(N\) 的边定向为从右到左,其他相反。显然,此新有向图是 DAG。所以可以标号使得每条边从小标号到大标号。将 \(N\) 的边按入点大小降序排序,使 \(N\) 中的边集 \(<(x_i,y_i)>(x_i<y_i,y_i\in B-A,x_i\in A-B)\) 满足 \((x_j,y_i)(j>i)\) 不存在于图中。
反证,若 \(B\not\in F\),那么设环 \(C\subseteq B\), 取最小的 \(i\) 使得 \(x_i\in C\),则 \(\forall x\in C-\{x_i\},(x,y_i)\not\in D_M(A)\)。那么 \(C-\{x_i\}\subseteq cl(A-\{y_i\})\)。
故 \(cl(C-\{x_i\})\subseteq cl(cl(A-\{y_i\}))=cl(A-\{y_i\})\)。由于 \(C\) 是环,\(x_i\in cl(C-\{x_i\})\subseteq cl(A-\{y_i\})\),但 \((x_i,y_i)\in D_M(A)\),所以 \(A-\{y_i\}+\{x_i\}\in F\),那么 \(x_i\not\in cl(A-\{y_i\})\),矛盾。
定义 3.4
拟阵交的交换图:给定同一全集上的拟阵 \(M_1,M_2\),一个集合 \(A\in F_1\cap F_2\),定义 \(D_{M_1,M_2}(A)\) 是二分图,左部点是 \(A\),右部点是 \(U-A\),一条左部点 \(x\) 指向右部点 \(y\) 的边存在当且仅当 \(A-\{x\}+\{y\}\in F_1\),一条右部点 \(y\) 指向左部点 \(x\) 的边存在当且仅当 \(A-\{x\}+\{y\}\in F_2\)。
算法 3.2
拟阵交算法。设 \(M_1(U,F_1),M_2(U,F_2)\) 是待交的二拟阵。
接下来,我们将看到一个及其类似匈牙利算法的过程。
先令 \(A=\varnothing\)。定义 \(X_1=\{x\mid\{x\}+A\in F_1\,x\not\in A\},X_2=\{x\mid\{x\}+A\in F_2\,x\not\in A\}\)。
接下来,在交换图 \(D_{M_1,M_2}(A)\) 中找到一个从 \(X_1\) 到 \(X_2\) 的最短路 \(P\)(从 \(X_1\) 开始,\(X_2\) 结束)。
令 \(A=A\Delta P\),是集合异或。
最后直到不能再找到任何一条这样的边,算法结束,此时得到的 \(A\) 就是最大公共独立集。
直接实现即可。
例题 3.1
这个就是 Shannon 游戏的图拟阵版本。(稍有不同)。该游戏的性质将在后叙述。
首先显然图需要连通。联通之后,设 \(A\) 选点 \(u,v\),则加边方(\(B\))胜利条件为 \(M(E\cup\{(u,v)\},F)\)(这是一个图拟阵)有两个不交基,就是有两个不交生成树。
而 \((u,v)\) 是任意的,设原图不含两个不交生成树,不难发现,可以找到 \((u,v)\) 使得新图不含两个不交生成树。因此,我们只需对原图拟阵求不交基即可。等价于求 \(M,M^*\) 的最大公共独立集(“拟阵交”)。拟阵交算法可以解决这个问题,时间复杂度 \(O(Tnm^2)\)。
// Problem: Game of Connect
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/UVA12370
// Memory Limit: 0 MB
// Time Limit: 3000 ms
// UOB Koala
//
// Powered by CP Editor (https://cpeditor.org)
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=305,INF=0x3f3f3f3f;
int Test;
vector<int> D[maxn];
int x[maxn],y[maxn],ex[maxn],fa[maxn],dis[maxn],pre[maxn],n,m;
bool X1[maxn],X2[maxn];
int Find(int x){
return x==fa[x]?x:fa[x]=Find(fa[x]);
}
queue<int> q;
signed main(){
cin>>Test;
for(int zhicheng=1;zhicheng<=Test;zhicheng++){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>x[i]>>y[i];
x[i]++,y[i]++;
ex[i]=1;
}
int R=0;
for(int i=1;i<=n;i++)fa[i]=i;
for(int i=1;i<=m;i++){
if(Find(x[i])!=Find(y[i]))fa[Find(x[i])]=Find(y[i]),R++;
}
if(R<n-1){
cout<<"Case "<<zhicheng<<": NO"<<endl;
continue;
}
while(1){
for(int i=1;i<=n;i++)fa[i]=i;
for(int i=1;i<=m;i++){
if(!ex[i]&&Find(x[i])!=Find(y[i]))fa[Find(x[i])]=Find(y[i]);
}
for(int i=1;i<=m;i++){
if(ex[i]&&Find(x[i])!=Find(y[i]))X1[i]=1;
else X1[i]=0;
}
for(int i=1;i<=m;i++){
if(ex[i]){
for(int j=1;j<=n;j++)fa[j]=j;
int cnt=0;
for(int j=1;j<=m;j++)if(ex[j]&&j!=i&&Find(x[j])!=Find(y[j]))fa[Find(x[j])]=Find(y[j]),++cnt;
if(cnt==n-1)X2[i]=1;
else X2[i]=0;
}else X2[i]=0;
}
for(int i=1;i<=m;i++)D[i].clear();
for(int i=1;i<=m;i++){
if(!ex[i]){
for(int j=1;j<=n;j++)fa[j]=j;
for(int j=1;j<=m;j++)if(!ex[j]&&j!=i)fa[Find(x[j])]=Find(y[j]);
for(int j=1;j<=m;j++)if(ex[j]&&Find(x[j])!=Find(y[j]))D[i].push_back(j);
}else{
for(int j=1;j<=n;j++)fa[j]=j;
int cnt=0;
for(int j=1;j<=m;j++)if(j!=i&&ex[j])if(Find(x[j])!=Find(y[j]))++cnt,fa[Find(x[j])]=Find(y[j]);
for(int j=1;j<=m;j++)if(!ex[j]&&(cnt==n-1||(cnt==n-2&&Find(x[j])!=Find(y[j]))))D[i].push_back(j);
}
}
for(int i=1;i<=m;i++){
dis[i]=INF,pre[i]=0;
if(X1[i])dis[i]=0,q.push(i);
}
while(!q.empty()){
int u=q.front();
q.pop();
for(auto v:D[u]){
if(dis[v]>dis[u]+1){
dis[v]=dis[u]+1,pre[v]=u;
q.push(v);
}
}
}
bool ck=0;
pair<int,int> ans={INF,INF};
for(int i=1;i<=m;i++)if(X2[i]&&dis[i]<INF)ck=1,ans=min(ans,{dis[i],i});
if(ck){
int now=ans.second;
while(now)ex[now]^=1,now=pre[now];
}
if(!ck)break;
}
int ans=0;
for(int i=1;i<=m;i++)if(!ex[i])ans++;
if(ans==n-1) cout<<"Case "<<zhicheng<<": YES"<<endl;
else cout<<"Case "<<zhicheng<<": NO"<<endl;
}
return 0;
}
定理 3.6
算法 3.2 求出了最大公共独立集。
证明:
设 \(S=\{z\mid z\in U,z\text{ 可以通过 D 到达 } X_2\}\)。
先证明 \(A\) 在每一次异或后总是公共独立集。
这里证明 \(A\in F_1\),\(F_2\) 类似。
设最短路 \(P=\{x_0,y_1,x_1,\dots,y_t,x_t\}\),\(B=A-\{y\}_{\ge 1}+\{x\}_{\ge 1}\),其中 \(y_i\in A,x_i\in U-A\)。
\(A-B=\{y\}_{\ge 1},B-A=\{x\}_{\ge 1}\),\(|A-B|=|B-A|=t\)。
注意到仅保留从左到右的边的基图是 \(D_{M_1}\),在此图上 \(A-B\) 到 \(B-A\) 具有唯一(最短)匹配(路)。
所以 \(B\in F_1\)。
考虑 \(r_1(A\cup B)=r_1(A\cup\{x\}_{\ge 1})=r_1(A)=r_1(B)\),第二个等号成立因为 \(\forall e\in cl(A),cl(A)\subseteq cl(A\cup\{e\})\)。
而 \(x_0\in X_1\),所以 \(A+\{x_0\}\in F_1\)。考虑 \(B\) 应用交换,\(\exists x\in A-B+\{x_0\},B+\{x\}\in F_1\)。
如果 \(x\neq x_0\),则 \(r_1(A\cup B)=r_1(B)\) 不成立,所以 \(B+\{x_0\}\in F_1\),也就是新的 \(A\)。
这样就归纳地证明了 \(A\) 在每一次异或后总是公共独立集。
证明 \(|A|=r_1(S)+r_2(U-S)\) 以说明是最大的(也是对最大最小定理的构造性证明)。
只需证明(还有 \(r_2\)) \(r_1(S)\le |A\cap S|\),因为 \(r_1(S)\ge |A\cap S|\)。
反证,若 \(r_1(S)>|A\cap S|\),\(\exists x\in S-A,(A\cap S)\cup\{x\}\in F_1\)。
如果 \(A\cup\{x\}\in F_1\),那么 \(x\in X_1\),而 \(x\in S\),可达 \(X_2\),而算法已结束,不存在这样的 \(x\)。矛盾。
所以一定 \(\exists y\in A-S,A-\{y\}+\{x\}\in F_1\)(由于 \(A\) 是独立集,一直交换即可)所以 \((y,x)\in D_{M_1,M_2}\),\(y\in S\),矛盾。
所以,\(r_1(S)\le |A\cap S|\),但 \(r_1(S)\ge |A\cap S|\),所以 \(r_1(S)=|A\cap S|\)。
另一边同理,即证。这样就结合最小最大定理的 \(\le\) 证到了最大性。
所以算法 3.2 求出了最大公共独立集。
算法 3.3
带权拟阵交算法。
设有 \(\omega\mapsto U\to \R\)。
拟阵交的结果要求最大化选的公共独立集的元素权值和。
只需把求最短路的过程改为:
点赋权 \(\omega'\)。
求出以点权和作为第一关键字,经过点数为第二关键字的最短路即可。