二分图的匹配和图论

合集下载

图论——二分图1:二分图以及判定

图论——二分图1:二分图以及判定

图论——⼆分图1:⼆分图以及判定图,有有向图,⽆向图,稠密图,简单图······算法,有贪⼼法,⼆分法,模拟法,倍增法······那,⼆分图是啥?⼆分法+有向图?于是,我查了许多资料,才对它有⼀定了解。

⼆分图:⼆分图,是图论中的⼀种特殊模型,设G=(V,E)是⼀个⽆向图,如果顶点V可分割为两个互不相交的⼦集(A,B),并且同⼀集合中不同的两点没有边相连。

这就是⼆分图。

举个栗⼦吧:这是不是⼆分图?反正我第⼀次看觉得不是其实,是的,他是⼆分图,尽管看上去是连着的。

若我们将图中的⼀些边转⼀下,变成:这就是⼀个明显的⼆分图。

集合A与B中的点互不相连。

因此,在⼿动判定⼆分图时学会转边!辣魔,⼆分图要⽤计算机判定怎么实现?数竞⼤佬:简单!!!!染⾊⼤法!!!有没有熟悉的感觉0表⽰还未访问,1表⽰在集合A中,2表⽰在集合B中。

col(color)储存颜⾊。

初始化为0.上代码:其实是模板可以记忆。

1 vector <int> v[N];2void dfs(int x,int y){3 col[x]=y;4for (int i=0; i<v[x].size(); i++) {5if (!col[v[x][i]]) dfs(v[x][i],3-y);6if (col[v[x][i]]==col[x]) FLAG=true; //产⽣了冲突7 }8 }9for (i=1; i<=n; i++) col[i]=0; //初始化10for (i=1; i<=n; i++) if (!col[i]) dfs(i,1); //dfs染⾊11if (FLAG) cout<<"NO"; else cout<<"YES";下⼀章我们将讲到⼆分图的匹配,我们明天见。

图论:二分图多重匹配

图论:二分图多重匹配

图论:⼆分图多重匹配使⽤最⼤流和费⽤流解决⼆分图的多重匹配之前编辑的忘存了好⽓啊。

本来打算学完⼆分图的乱七⼋糟的匹配之后再去接触⽹络流的,提前撞到了之前我们说的⼆分图最⼤匹配和⼆分图最⼤权匹配有⼀个特点,那就是没个点只能与⼀条边相匹配如果规定⼀个点要与L条边相匹配,这样的问题就是⼆分图的多重匹配问题然后根据边是否带权重,⼜可以分为⼆分图最⼤多重匹配和⼆分图最⼤权多重匹配(⼆分图多重最佳完美匹配)⾸先给出⼆分图多重最⼤匹配的做法:在原图上建⽴源点S和汇点T,S向每个X⽅点连⼀条容量为该X⽅点L值的边,每个Y⽅点向T连⼀条容量为该Y⽅点L值的边原来⼆分图中各边在新的⽹络中仍存在,容量为1(若该边可以使⽤多次则容量⼤于1),求该⽹络的最⼤流,就是该⼆分图多重最⼤匹配的值然后给出⼆分图多重最优匹配(⼆分图多重最⼤权匹配)的做法:在原图上建⽴源点S和汇点T,S向每个X⽅点连⼀条容量为该X⽅点L值、费⽤为0的边,每个Y⽅点向T连⼀条容量为该Y⽅点L值、费⽤为0的边原来⼆分图中各边在新的⽹络中仍存在,容量为1(若该边可以使⽤多次则容量⼤于1),费⽤为该边的权值。

求该⽹络的最⼤费⽤最⼤流,就是该⼆分图多重最优匹配的值这道题⾥⾯,⼀共有X⽅点这么多的电影,每个电影需要拍摄多少天就是对应的X⽅点L值,然后每⼀天是⼀个Y⽅点,由于每⼀天只能拍摄⼀部电影,所有Y⽅点的L值均为1下⾯介绍⼀下实现:int n,sum,cnt,ans;int g[maxn],cur[maxn];int str[25][10];struct Edge{int u,v,next,cap,flow;}e[maxm];这⾥⾯的cur数组是g数组的临时数组str⽤来保存每⼀个电影可以在哪⼀天拍摄Edge是⽹络流图⾥⾯的边void addedge(int u,int v,int c){e[++cnt].u=u;e[cnt].v=v;e[cnt].cap=c;e[cnt].flow=0;e[cnt].next=g[u];g[u]=cnt;e[++cnt].u=v;e[cnt].v=u;e[cnt].cap=0;e[cnt].flow=0;e[cnt].next=g[v];g[v]=cnt;}建图的时候,注意怎么赋值的接下来根据题意建图:for(int i=1;i<=n;i++){for(int j=1;j<=7;j++)scanf("%d",&str[i][j]);scanf("%d%d",&d,&w);sum+=d;addedge(0,i,d); //容量为需要多少天for(int j=1;j<=7;j++)for(int k=0;k<w;k++)if(str[i][j]) addedge(i,20+k*7+j,1);}for(int i=21;i<=370;i++) addedge(i,371,1);ans=maxflow(0,371);0为源点,371为汇点sum最后进⾏⼀个统计,和源点出发的最⼤流量进⾏⽐较,如果相等,说明电影排的开然后是求最⼤流的⼀个板⼦int maxflow(int st,int ed){int flowsum=0;while(bfs(st,ed)){memcpy(cur,g,sizeof(g));flowsum+=dfs(st,ed,INF);//cout<<"#"<<flowsum<<" ";}return flowsum;}具体的DFS和BFS这⾥不作为重点,以后再说下⾯给出完整的实现:1 #include<cstdio>2 #include<cstring>3 #include<algorithm>4using namespace std;5const int INF=1000000000;6const int maxn=1005;7const int maxm=20005;8int n,sum,cnt,ans;9int g[maxn],cur[maxn];10int str[25][10];11struct Edge{int u,v,next,cap,flow;}e[maxm];12void addedge(int u,int v,int c)13 {14 e[++cnt].u=u;e[cnt].v=v;e[cnt].cap=c;15 e[cnt].flow=0;e[cnt].next=g[u];g[u]=cnt;1617 e[++cnt].u=v;e[cnt].v=u;e[cnt].cap=0;18 e[cnt].flow=0;e[cnt].next=g[v];g[v]=cnt;19 }20int q[maxn],vis[maxn],d[maxn];21bool bfs(int st,int ed)22 {23 memset(q,0,sizeof(q));24 memset(vis,0,sizeof(vis));25 memset(d,-1,sizeof(d));26 vis[st]=1;d[st]=0;27int h=0,t=1;28 q[t]=st;29while(h!=t)30 {31 h=h%maxn+1;32int u=q[h];33for(int tmp=g[u];tmp;tmp=e[tmp].next)34 {35if(!vis[e[tmp].v]&&e[tmp].cap>e[tmp].flow)36 {37 vis[e[tmp].v]=1;38 d[e[tmp].v]=d[u]+1;39if(e[tmp].v==ed) return true;40 t=t%maxn+1;41 q[t]=e[tmp].v;42 }43 }44 }45return false;46 }47int getpair(int x)48 {49if(x%2==0)50return x-1;51else return x+1;52 }53int dfs(int x,int ed,int a)54 {55if(x==ed||a==0) return a;56int flow=0,f;57for(int tmp=cur[x];tmp;tmp=e[tmp].next)58 {59if(d[e[tmp].v]==d[x]+1&&(f=dfs(e[tmp].v,ed,min(a,e[tmp].cap-e[tmp].flow)))>0)60 {61 e[tmp].flow+=f;62 e[getpair(tmp)].flow-=f;63 a-=f;64 flow+=f;65if(a==0) break;66 }67 }68return flow;69 }70int maxflow(int st,int ed)71 {72int flowsum=0;73while(bfs(st,ed))74 {75 memcpy(cur,g,sizeof(g));76 flowsum+=dfs(st,ed,INF);77//cout<<"#"<<flowsum<<" ";78 }79return flowsum;8081 }82void init()83 {84 sum=cnt=0;85 memset(g,0,sizeof(g));86 }87int main()88 {89int T,d,w;90 scanf("%d",&T);91while(T--)92 {93 init();94 scanf("%d",&n);95for(int i=1;i<=n;i++)96 {97for(int j=1;j<=7;j++)98 scanf("%d",&str[i][j]);99 scanf("%d%d",&d,&w);100 sum+=d;101 addedge(0,i,d); //容量为需要多少天102for(int j=1;j<=7;j++)103for(int k=0;k<w;k++)104if(str[i][j]) addedge(i,20+k*7+j,1);105 }106for(int i=21;i<=370;i++) addedge(i,371,1);107 ans=maxflow(0,371);108if(ans==sum) printf("Yes\n");109else printf("No\n");110 }111return0;112 }据说这是典型的最⼤流题⽬,然⽽为了强⾏安利⼀波⼆分图的多重匹配,就不说成那个了。

二分图理论

二分图理论

*7.5 二部图及匹配7.5.1二部图在许多实际问题中常用到二部图,本节先介绍二部图的基本概念和主要结论,然后介绍它的一个重要应用—匹配。

定义7.5.1 若无向图,G V E =的顶点集V 能分成两个子集1V 和2V ,满足(1)12V V V =,12V V φ=;(2)(,)e u v E ∀=∈,均有1u V ∈,2v V ∈。

则称G 为二部图或偶图(Bipartite Graph 或Bigraph),1V 和2V 称为互补顶点子集,常记为12,,G V V E =。

如果1V 中每个顶点都与2V 中所有顶点邻接,则称G 为完全二部图或完全偶图(Complete Bipartite Graph),并记为,r s K ,其中12,r V s V ==。

由定义可知,二部图是无自回路的图。

图7-55中,(),(),(),(),()a b c d e 都是二部图,其中(),(),(),()b c d e 是完全二部图1,32,32,43,3,,,K K K K 。

图7-55二部图示例显然,在完全二部图中,r s K 中,顶点数n r s =+,边数m rs =。

一个无向图如果能画成上面的样式,很容易判定它是二部图。

有些图虽然表面上不是上面的样式,但经过改画就能成为上面的样式,仍可判定它是一个二部图,如图7-56中()a 可改画成图()b ,图()c 可改画成图()d 。

可以看出,它们仍是二部图。

图7-56二部图示例定理7.5.1 无向图,G E =为二部图的充分必要条件为G 中所有回路的长度均为偶数。

证明 先证必要性。

设G 是具有互补节点子集1V 和2V 的二部图。

121(,,,,)k v v v v 是G 中任一长度为k 的回路,不妨设11v V ∈,则211m v V +∈,22m v V ∈,所以k 必为偶数,不然,不存在边1(,)k v v 。

再证充分性。

设G 是连通图,否则对G 的每个连通分支进行证明。

算法学习:图论之二分图的最优匹配(KM算法)

算法学习:图论之二分图的最优匹配(KM算法)

二分图的最优匹配(KM算法)KM算法用来解决最大权匹配问题:在一个二分图内,左顶点为X,右顶点为Y,现对于每组左右连接XiYj有权wij,求一种匹配使得所有wij的和最大。

基本原理该算法是通过给每个顶点一个标号(叫做顶标)来把求最大权匹配的问题转化为求完备匹配的问题的。

设顶点Xi的顶标为A[ i ],顶点Yj的顶标为B[ j ],顶点Xi与Yj之间的边权为w[i,j]。

在算法执行过程中的任一时刻,对于任一条边(i,j),A[ i ]+B[j]>=w[i,j]始终成立。

KM算法的正确性基于以下定理:若由二分图中所有满足A[ i ]+B[j]=w[i,j]的边(i,j)构成的子图(称做相等子图)有完备匹配,那么这个完备匹配就是二分图的最大权匹配。

首先解释下什么是完备匹配,所谓的完备匹配就是在二部图中,X点集中的所有点都有对应的匹配或者是Y点集中所有的点都有对应的匹配,则称该匹配为完备匹配。

这个定理是显然的。

因为对于二分图的任意一个匹配,如果它包含于相等子图,那么它的边权和等于所有顶点的顶标和;如果它有的边不包含于相等子图,那么它的边权和小于所有顶点的顶标和。

所以相等子图的完备匹配一定是二分图的最大权匹配。

初始时为了使A[ i ]+B[j]>=w[i,j]恒成立,令A[ i ]为所有与顶点Xi关联的边的最大权,B[j]=0。

如果当前的相等子图没有完备匹配,就按下面的方法修改顶标以使扩大相等子图,直到相等子图具有完备匹配为止。

我们求当前相等子图的完备匹配失败了,是因为对于某个X顶点,我们找不到一条从它出发的交错路。

这时我们获得了一棵交错树,它的叶子结点全部是X顶点。

现在我们把交错树中X顶点的顶标全都减小某个值d,Y顶点的顶标全都增加同一个值d,那么我们会发现:1)两端都在交错树中的边(i,j),A[ i ]+B[j]的值没有变化。

也就是说,它原来属于相等子图,现在仍属于相等子图。

2)两端都不在交错树中的边(i,j),A[ i ]和B[j]都没有变化。

数学建模图论模型

数学建模图论模型
若将图G的每一条边e都对应一个实数Fe,则称 F(e)为该边的权,并称图G为赋权图(网络), 记为 G = <V, E , F>。
任意两点均有通路的图称为连通图。
连通而无圈的图称为树,常用T=<V,E>表示树。
若图G’是图 G 的生成子图,且G’又是一棵树, 则称G’是图G 的生成树。
例 Ramsey问题
图1
图2
并且常记: V = v1, v2, … , vn, |V | = n ; E = {e1, e2, … , em}ek=vivj , |E | = m
称点vi , vj为边vivj的端点 在有向图中, 称点vi , vj分别为边vivj的 始点和终点. 该图称为n,m图
8
对于一个图G = V, E , 人们常用图形来表示它, 称其 为图解 凡是有向边, 在图解上都用箭头标明其方向.
4、P'代替P,T'代替T,重复步骤2,3
定理2 设 T为V的子集,P=V-T,设 (1)对P中的任一点p,存在一条从a到p的最短路径,这条路径仅有P中的
点构成, (2)对于每一点t,它关于P的指标为l(t),令x为最小指标所在的点, 即:
l(x)mli(tn )} t{ ,T
(3)令P’=P Ux,T’=T-{x},l’(t)表示T'中结点t关于P'的指标,则
解:用四维01向量表示人,狼,羊,菜例在过河西河岸问的题状态(在
岸则分量取1;否则取0),共有24 =16 种状态; 在河东岸 态类似记作。
由题设,状态(0,1,1,0),(0,0,1,1),(0,1,1,1)是不允许的
其对应状态:(1,0,0,1), (1,1,0,0),(1,0,0,0)也是不允许

二分图匹配

二分图匹配

二分图匹配一、二分图的概念二分图又称作二部图,是图论中的一种特殊模型。

设G=(V,{R})是一个无向图。

如顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属两个不同的子集。

则称图G为二分图。

二、最大匹配给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配。

选择这样的边数最大的子集称为图的最大匹配问题(maximal matching problem)如果一个匹配中,图中的每个顶点都和图中某条边相关联,则称此匹配为完全匹配,也称作完备匹配。

三、匈牙利算法求最大匹配的一种显而易见的算法是:先找出全部匹配,然后保留匹配数最多的。

但是这个算法的复杂度为边数的指数级函数。

因此,需要寻求一种更加高效的算法。

1、增广路的定义(也称增广轨或交错轨):若P是图G中一条连通两个未匹配顶点的路径,并且属M的边和不属M的边(即已匹配和待匹配的边)在P上交替出现,则称P为相对于M的一条增广路径。

由增广路的定义可以推出下述三个结论:●P的路径长度必定为奇数,第一条边和最后一条边都不属于M。

●P经过取反操作可以得到一个更大的匹配M’。

●M为G的最大匹配当且仅当不存在相对于M的增广路径。

2、用增广路求最大匹配(称作匈牙利算法,匈牙利数学家Edmonds于1965年提出)。

算法轮廓:(1)置M为空(2)找出一条增广路径P,通过取反操作获得更大的匹配M’代替M(3)重复(2)操作直到找不出增广路径为止程序清单:Function find(k:integer):integer;var st,sf,i,j,t:integer;queue,father:array[1..100] of integer;beginqueue[1] := k; st := 1; sf := 1;fillchar(father,sizeof(father),0);repeatfor i:=1 to n doif (father[i]=0)and(a[queue[st],i]=1) thenbeginif match2[i]<>0 thenbegininc(sf);queue[sf] := match2[i];father[i] := queue[st];end elsebeginj := queue[st];while true dobegint := match1[j];match1[j] := i;match2[i] := j;if t = 0 then break;i := t; j := father[t];end;find := 1;exit;end;end;inc(st);until st>sf;find := 0;end;在主程序中调用下面的程序即可得出最大匹配数。

数学建模-二分图匹配

数学建模-二分图匹配


解题思路:本题是一道典型的二分图最大匹配 题。采用匈牙利算法。本题的构图是这样的, 左右两边的x和y,分别是x学生,y课程。那么 已知哪些学生可以学哪些课,也就是在x的点 和 y的点之间首先连上线。求xy的最大匹配。如果 有P个学生做了课代表,那么就是P门课程都有 课代表了。
例题1 Courses(hdu1006)
X学生
1 2 3
Y课程
1 2 3
样例 3
(1)建图
3 3 1 2 3 2 1 2 1 1
例题1 Courses(hdu1006)
X学生
1 2 3
Y课程
1 2 3
X学生
1 2 3
Y课程
1 2 3 连接 x1-y1 x2-y2 得到此 匹配, 匹配数 为2.
(1)建图
(2)
例题1 Courses(hdu1006)
(5)
(4)
例题1 Courses(hdu1006)
X学生
1
2 3
Y课程
1
2 3 1 2 3 1 2 3
1
2 3
1
2 3
(1)
1 2 1 2 1 2
(2)
1 2
(3)
3
3
3
3
(4)
(5)
#include<iostream> int link[303][303]; int used[303],mathy[303]; using namespace std; int P,N; int find(int x) {//x学生可以匹配到某课程 么 //可以返回1,不可以返回0 … } int MMG() { //计算最大匹配数, 调用了find … } int main( ) {int x,y,i,j; int cases; scanf("%d",&cases);

二分图的完备匹配

二分图的完备匹配

这个算法的要点是把初始匹配通过可增广轨逐次增 广,以至得到最大匹配。然后根据有无未盖点来判 定这个最大匹配是否为完备匹配。 例如求图7—8(d)中的最大匹配, 设初始匹配M={(X2Y2,X3Y3,X5Y5} 以未盖点X1为根,生成交错树,结果得到可增广 轨X1Y2X2Y1(见)。
X1
X2
X3
X4
X5
Y1
Y2
Y3
Y4
Y5
X1
X2
X3
X4
X5
Y1
Y2
Y3
Y4
Y5
求二分图最佳匹配的算法——匈牙利算法 变量说明; S——外点集合,初始时为交错树的根; T——内点集合,初始时为空; N(S)——与S中的顶点相邻的顶点集合。显然,若N(S)= T,表明与任一外点相连的端点都在内点集合里,找不出一 条不属于交错树的边,图G无完备匹配; M——匹配边集合; E(P)——可增广轨P上的边。 · MOE(P)——进行对称差运算的结果,为可增广轨P上的 匹配边与非匹配边对换,P轨外的匹配边不变,使得M改进 成一个多包含一条边的匹配。
问是否能从g中得出一个不含未盖点的匹配这种将g的每一个顶点盖住的匹配称为二分图的完备匹可能存在完备匹配的图是否仅限于二分图呢
二分图的完备匹配

某公司有工作人员X1,X2,…,Xm,他们去做 工作Y1,Y2,…,Yn,每人适合做其中的一项或几 项工作,问能否每人都分配一项合适的工作。 这个问题的数学模型是:构造一个二分图G, 顶点划分为两个部分: 一个是工作人员集合X={Xl,X2,…,Xm}, 一个是工作集合Y={Y1,Y2,…,Yn}, 当且仅当Xi适合干工作Yi时,Xi与Yi之间连一条边。 问是否能从G中得出一个不含未盖点的匹配,这种 将G的每一个顶点盖住的匹配称为二分图的完备匹 配。

konig 定理

konig 定理

konig 定理
Konig定理是图论中的一个重要定理,它是由匈牙利数学家Dénes Konig在1936年首次证明的。

这个定理主要应用于二分图(bipartite graph)的研究中,二分图是一种特殊的图,其中所有的顶点都可以被分成两个互不相交的子集,并且每一条边都连接这两个子集中的一个顶点。

Konig定理的表述如下:在一个二分图中,最大匹配数等于最小点覆盖数。

换句话说,一个图中的最大匹配数等于覆盖该图中所有顶点所需的最小边数。

为了更好地理解这个定理,我们可以先了解一下什么是匹配和点覆盖。

在图论中,一个匹配是一个边的集合,其中任意两条边都不共享一个顶点。

最大匹配是指一个匹配中包含的边数最多。

点覆盖是指一个顶点的集合,该集合中的任意顶点都是边的一个端点。

最小点覆盖是指覆盖所有顶点所需的最小顶点数。

根据Konig定理,在二分图中,最大匹配数等于最小点覆盖数。

这个定理的证明过程需要使用到一些图论中的技巧和结论,例如Kőnig-Egerváry定理和Hall定理等。

这个定理的应用非常广泛,它可以用于解决一些组合优化问题,例如最大匹配问题和最小点覆盖问题等。

此外,Konig定理还可以用于证明一些其他图论中的结论,例如Kőnig-Egerváry定理和Hall定理等。

关于二部图与匹配问题的研究

关于二部图与匹配问题的研究

关于二部图与匹配问题的研究关于二部图与匹配问题的研究二部图与匹配问题是图论中的经典研究领域,对于理解和解决实际问题具有重要的意义。

在本文中,我们将介绍二部图的基本概念,以及匹配问题在实际中的应用,并探索相关算法的研究与改进。

一、二部图的基本概念二部图是一种特殊的图结构,其中的顶点可以被分为两个互不相交的集合(通常表示为U和V),集合U中的顶点与集合V中的顶点之间没有边相连。

二部图可以用数学方式表示为G=(U, V, E),其中U和V表示两个顶点集合,E表示边的集合。

二部图的一个关键性质是,一个边的两个顶点必须分别属于两个不同的集合。

这个概念在实际中有很多应用,比如在婚姻匹配问题中,假设有一组男性和一组女性,我们可以用二部图来表示可能的婚姻关系。

二、匹配问题的定义与应用在二部图G=(U, V, E)中,我们称一个边的集合M为一个匹配,如果M中的边两两之间没有公共顶点。

换句话说,任意两条边都不连接同一个顶点。

匹配问题的目标是找到一个具有最大边数的匹配M,或者找到一个最小边数的匹配。

匹配问题在实际中有很多应用。

例如,在网络中,我们可以将二部图中的两个顶点集合U和V分别表示为发送方和接收方,边表示连接发送方和接收方的通信链路。

这时,匹配问题等价于如何合理分配通信链路,使得网络的容量得到最大利用。

另一个应用是在任务分配问题中。

假设有一组任务和一组工作者,每个任务需要特定的技能,每个工作者也具有特定的技能。

二部图可以用来表示任务与工作者之间的技能匹配情况。

匹配问题就变成了如何将任务分配给工作者,使得每个任务都能被合适的工作者完成。

三、匹配问题的经典算法与改进匹配问题的研究已经有了很长的历史,可以追溯到20世纪40年代。

最初,匈牙利算法是解决匹配问题最常用的算法之一。

该算法基于增广路径的概念,通过不断寻找增广路径并更新匹配,最终得到最大匹配。

然而,匈牙利算法存在一些局限性。

首先,它只能解决二部图中的最大匹配问题,不适用于其他相关问题。

什么是二分图

什么是二分图
匹配有很多种。
我们定义匹配点、匹配边、未匹配点、未匹配边,它们的含 义非常显然。例如图3中1,4,5,7为匹配点,其他顶点为未匹 点;1-5、4-7为匹配边,其他边为非匹配边。
最大匹配&完美匹配
最大匹配:一个图所有的匹配中,所匹配的边数最多 的匹配,称为这个图的最大匹配。图4是一个最大匹 配。 完美匹配:如果一个图的某个匹配中,所有的顶点都 是匹配点,那么它就是一个完美匹配。图 4 是一个完 美匹配。显然,完美匹配一定是最大匹配(完美匹配 的任何一个点都已经匹配,添加一条新的匹配边一定 会与已有的匹配边冲突)。但并非每个图都存在完美 匹配。
交替路:图的一条简单路径,满足任意相邻的两条边, 一条在匹配内,一条不在匹配内 。
增广路:从一个未匹配点出发,走交替路, 如果途径另一个未匹配点(出发的点不算), 则这条交替路称为增广路(agumenting path)。 例如,图 5 中的一条增广路如图 6 所示 (图中的匹配点均用红色标出)
/*==================================================*\ | 二分图匹配(匈牙利算法BFS 实现) | INIT: g[][]邻接矩阵; | CALL: res = MaxMatch (); Nx, Ny 初始化!!! | 优点:适用于稀疏二分图,边较少,增广路较短。 | 匈牙利算法的理论复杂度是O(VE) \*==================================================*/ const int MAXN = 1000; int g[MAXN][MAXN], Mx[MAXN], My[MAXN], Nx, Ny; int chk[MAXN], Q[MAXN], prev[MAXN]; int MaxMatch(void) { int res = 0; int qs, qe; memset(Mx, -1, sizeof(Mx)); memset(My, -1, sizeof(My)); memset(chk, -1, sizeof(chk)); for (int i = 0; i < Nx; i++) { if (Mx[i] == -1) {//对于x集合中的每个没有匹配的点i进行一次bfs找 交错轨 qs = qe = 0; Q[qe++] = i; prev[i] = -1; bool flag = 0;//判断是否找到

离散数学中的图的匹配和二分图

离散数学中的图的匹配和二分图

在离散数学中,图论是一门重要的理论基础课程,它研究的是由节点和边构成的图结构。

图的匹配和二分图是图论中的两个重要概念,它们在现实生活中有着广泛的应用。

首先,我们来介绍一下图的匹配。

图的匹配指的是在一个图中选取一些边,使得这些边彼此不相交,即任意两条边不共享同一个顶点。

图的匹配问题可以用最优化问题来描述,既需要满足匹配条件,还需要满足某种优化目标。

例如,在一个社交网络图中,选择一些用户与其他用户进行配对,使得两个不认识的用户不会被配对在一起,同时目标是使得配对用户的兴趣爱好相似度最大化。

在这个问题中,边表示用户之间是否认识,而边的权值表示兴趣爱好的相似度。

其次,我们来介绍一下二分图。

二分图是一种特殊的图结构,它可以被划分为两个独立的顶点集合,使得同一个顶点集合内的顶点之间没有边相连。

换句话说,二分图中不存在奇圈。

二分图的一个典型例子是婚姻匹配问题。

假设有n个男性和n个女性,他们之间有多种可能的配对方式,但是每个人只能与另一个不同性别的人结婚。

这时,我们可以用一个二分图来表示这个问题,其中男性和女性分别作为两个顶点集合,边表示可能的配对。

然后,我们可以使用图的匹配算法来找到一个最佳匹配方案。

图的匹配和二分图在离散数学中有着重要的研究价值和应用价值。

首先,图的匹配可以用于解决资源分配问题。

例如,在一个工厂中,有m个任务需要分配给n个员工进行处理,每个员工对某些任务有一定的能力要求,而每个任务也需要一定的时间完成。

这时,我们可以将员工和任务分别作为两个顶点集合,边的权值表示员工对任务的能力是否满足要求和任务完成时间。

然后,我们可以使用图的匹配算法来找到一个最佳的任务分配方案,使得员工的工作量最小。

其次,二分图可以用于解决社交网络分析问题。

如今,社交网络已经成为人们日常生活中重要的一部分,人们之间通过社交网络平台进行交流和连接。

我们可以使用二分图来表示社交网络的结构,其中一个顶点集合表示用户,另一个顶点集合表示用户之间的好友关系,边的权值表示用户之间的相似性度量。

「算法笔记」霍尔定理

「算法笔记」霍尔定理

「算法笔记」霍尔定理⼀、前置概念⼤家都会的东西。

下⾯的图⼀般指⼆分图。

匹配:在图论中,⼀组匹配(matching)是⼀个边的集合,其中任意两条边都没有公共端点。

对于⼀组匹配 \(S\)(\(S\) 是⼀个边集),属于 \(S\) 的边被称为“匹配边”,匹配边的端点被称为“匹配点”。

剩余的边或点被称为“⾮匹配边”和“⾮匹配点”。

最⼤匹配:⼀个图所有匹配中,所含匹配边数最多的匹配。

完美匹配:如果⼀个图的某组匹配中,图中所有的顶点都是匹配点(显然同时也符合最⼤匹配),那么它就是⼀个完美匹配。

完美匹配,就是⼀组匹配中,左部的⼀个点恰好匹配到右部⼀个点,同样地,右部的⼀个点恰好匹配到左部⼀个点。

⼆、霍尔定理霍尔定理是判断⼆分图是否存在完美匹配的充要条件。

⾸先假设 \(|X|\leq |Y|\)(其中 \(X\) 是左部的点数,\(Y\) 是右部的点数)。

上⾯的这种说法,意思是,我们能把 \(X\) 中的点全部⽤完(作为匹配点),\(Y\) 中的点不⼀定⽤完(将点数较⼩的⼀侧的点都⽤完)。

另⼀种说法是:要求 \(|X|=|Y|\)(点之间⼀⼀匹配,所有点都⽤完)。

我们可以理解为是两种定义,两种说法哪个对,取决于怎么定义“完美匹配”。

但是霍尔定理对它们都适⽤,所以讨论霍尔定理时,我们采⽤更⼀般性的定义。

对于任意 \(X\) 的⼦集 \(a\),设 \(b\) 是 \(a\) 能到达的右部点集的并(通过 \(a\) 可以唯⼀确定 \(b\)),都有 \(|a|\leq |b|\)。

必要性是显然的。

因为若某⼀个 \(|a|>|b|\),\(a\) 中必然有某些点是匹配不了的(即完成不了把 \(a\) 中的点⽤完这个要求)。

充分性不太好证,可以不⽤管,⽽且这个定理看起来就很对 QwQ。

举个栗⼦:(题解被吃了)。

最后,感谢的指导,Dlstxdy!。

图论偶图与匹配.

图论偶图与匹配.
X =Y
所以M是完美匹配。
该推论又称为结婚定理:
村里的每一个女孩恰好只认识K个男孩,且每一 个男孩恰好只认识K个女孩,那么女孩可以嫁给她 所认识的一个男孩,男孩可以娶他所认识的一个女 孩,
证明 树至多有一个完美匹配
证明:
若树T存在两个互异的完美匹配M和M’ ,则 M ⊕ M ' ≠ φ, M ⊕ M ' 的每一个顶点度为2,因此T 含圈,这与T是树矛盾。
de vj∈V2,
则称G是二部图,也称二分图或偶图. 并称V1,V2是G的互补的
结点子集.
偶图的特点每一条边都跨接在两个互补结点子集上,而结点
子集内部任意两个结点都不邻接。
完全偶图:令G=<V,E>是以V1,V2为互补的结点子集的
偶图,如果V1中的每个结点都与V2中每个结点相邻接,则
称G是完全偶图. 如果|V1|=m, |V2|=n 则G记作Km,nm×n
G, M的边是实线 M’的边是虚线
G' = (V , M ⊕ M ')
x1,x2,...,x5为5个人,y1,y2,...,y5为5项工 作,x1 能做y1,y2,y3,y4三项工作,x5只能做y2一项 工作,其他情况类似,于是人员的工作安排问题就成为 偶图的匹配问题。
偶图完全匹配
设Vl和V2是偶图G=(V,E)的两个互补结点子集,如果存 在匹配M,使V1的所有结点都是M饱和点,则称M为从V1 到V2的完全匹配。
明,得到同样结论. 最后得G必是二部图.
¾ 匹配在无向图G=(V,E)中,对边集E的任一子集M,如 果M中的任意两条边都不相邻,则称M为图G的一个匹配 (或对集)。所谓两条边不相邻即两条边无公共端点。
¾ G中属于 M的边称为匹配边,匹配边的两个端点互为匹 配点,匹配边的所有结点称为关于M饱和点,否则称为 非饱和点。匹配M的基数(即M中边的数目)记作|M|.

二分图

二分图

二分图二分图又称作二部图,是图论中的一种特殊模型。

设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。

1定义简而言之,就是顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属于这两个互不相交的子集。

2辨析示例区别二分图,关键是看点集是否能分成两个独立的点集。

上图中U和V构造的点集所形成的循环圈不为奇数,所以是二分图。

上图中U和V和W构造的点集所形成的的循环圈为奇数,所以不是二分图。

3必要条件无向图G为二分图的充分必要条件是,G至少有两个顶点,且其所有回路的长度均为偶数。

证先证必要性。

设G为二分图<X,E,Y>。

由于X,Y非空,故G至少有两个顶点。

若C为G 中任一回路,令C=(v0,v1,v2,…,v l-1,v l=v0)其中诸vi(i=0,1,…,l)必定相间出现于X及Y中,不妨设{v0,v2,v4,…,v l=v0}&Iacute;X{v1,v3,v5,…,v l-1}&Iacute;Y因此l必为偶数,从而C中有偶数条边。

再证充分性。

设G的所有回路具有偶数长度,并设G为连通图(不失一般性,若G不连通,则可对G的各连通分支作下述讨论)。

令G的顶点集为V,边集为E,现构作X,Y,使<X,E,Y>=G。

取v0&Icirc;V,置X={v|v=v0或v到v0有偶数长度的通路}Y=V-XX显然非空。

现需证Y非空,且没有任何边的两个端点都在X中或都在Y中。

由于|V|≥2并且G为一连通图,因此v0必定有相邻顶点,设为v1,那么v1&Icirc;Y;故Y不空。

设有边(u,v),使u&Icirc;X,v&Icirc;X。

那么,v0到u有偶数长度的通路,或u=v0;v0到v有偶数长度的通路,或v=v0。

离散数学--第7章 图论-5(匹配)

离散数学--第7章 图论-5(匹配)

MM’
其中回路包含相同数目的M边和M’边。由|M’|>|M|, 必 存在M’边开始, M‘边终止的M交互道路,即M-可增广 道路,矛盾!
返回 结束
7.5 .2 最大匹配的基本定理
例] 从匹配M={(v6,v7)}开始,求下图的最大匹 配
11
(a)
(b)
系统地检查不饱和点出发有无可增 广道路,如,v1出发有可增广道路 v1,v7v6,v8(可画以v1为根的交互树), 由此得到匹配(a), v2出发没有,v3出 发存在v3v4,可得更大匹配(b), 其他 点出发不存在可增广道路,故(b)是 最大匹配。
交错路为一条 M可增广路。

v1 v6 v2 v3 v4
匹配, M {v1v6 , v2v5 }是一个对集;但不是
最大对集,有路 P:v3v2v5v4,通过 匹配, ( M E ( P)) ( E ( P) M )得比M 更大的对集。 匹配,P称为M 可扩路。 增广路
返回 结束
v5
7.5 .2 最大匹配的基本定理
为图G的最大匹配。
[匹配数] G中最大匹配中的边数称为匹配数,记作
(G)。设G的所有匹配为M1、M2、… 、Mk,记
' (G) max | M i |
i 1,...,k

返回 结束
7.5 .1 匹配的基本概念
e2 e6 e1
5
最大匹配: {e1,e5 ,e6} e7
e4 e3 匹配数:3
返回 结束
7.5 .2 最大匹配的基本定理
[M交错路] 设G和M如上所述,G的一条M交错路 指G中一条路,其中的边在M和 EM 中交错出现 。
路是由属于M的匹配边和不属于M的非匹配边交替出现组成

图论引导笔记第八章匹配与分解

图论引导笔记第八章匹配与分解

图论引导笔记第⼋章匹配与分解8.1 匹配定义:1、(边的集合)独⽴的:G.E的⼀个⼦集,且该集合中的任意两条边不相邻接。

称边独⽴集。

2、匹配(matching):图G的⼀个独⽴集。

3、匹配(match):⼆部图的两个部集的点集之间的⼀种映射关系,该映射关系满⾜于所连接的边是⼀个匹配(matching)*以下考虑的是⼆部图G,他的两个集部是U和W,且|U|≤|W|,X是U的⾮空⼦集4、(⾮空点集的)邻域:集合中所有顶点邻域的并。

设集合为X,记作N(X)5、(集部是)友好的:对于集部U,他的任意⾮空⼦集X,都有|N(X)|≥|X|。

(翻译⼀下就是说,在这个部⾥任意取⼀部分点都能形成匹配)6、互异代表元系:有⼀串⾮空有限集合{S1,S2,…,Sn},存在n个不同的元素{x1,x2,…,xn}使得xi∈Si,则这串{xi}称为互异代表元系。

(⽽不是指;仅仅这个集合有别的集合没有。

显然,|∪{Si}|≥n)7、(⼆分图)交错路:⼀条属于匹配的边和⼀条不属于匹配的边交错构成的路。

8、(任意分图)最⼤匹配:具有最⼤基数的匹配, 对于n阶⼆分图,最⼤匹配数不会超过floor(n/2)9、完美匹配:(此处讨论⼆分图)G的阶数为偶数,匹配基数等于n/2,G中任意顶点均能通过M匹配到G中另⼀个顶点。

完美匹配也必定是最⼤匹配。

使⽤:完美匹配要求图的⼀个集部是友好的和边有关的加<'>,和点有关的不加。

11、边独⽴数:G 中边独⽴集的最⼤基数。

记作β'(G)。

阶为n的图存在完美匹配当且仅当n为偶数且β'(G)=n/2.12、覆盖:顶点与其关联边,互为彼此的覆盖。

13、边覆盖:覆盖G所有点的边的集合,称为是G的⼀个边覆盖。

14、边覆盖数:G中所有边覆盖最⼩的基数,记作α'(G),当且仅当G不包含孤⽴点的时候有定义。

15、最⼩边覆盖:具有最⼩边覆盖基数的边覆盖。

边覆盖/独⽴有关的⼀些性质:对于整数n≥3,1≤r≤s,边覆盖数有:α'(Cn)=α'(Kn)=ceiling(n/2); α'(K_r,s)=s边独⽴数有:β'(Cn)=β'(Kn)=floor(n/2); β'(K_r,s)=r所以:α'(Cn)+β'(Cn)= α'(Kn)+β'(Kn)=n; α'(K_r,s)+ β'(K_r,s)=r =s+r以上性质很显然可以看出来。

《图论课件第五章匹配与因子分解》课件

《图论课件第五章匹配与因子分解》课件

二、因子分解
2.1 定义
因子分解是将图进行拆分,使得每个因子都是图的 一个子图。
2.2 贪心算法
贪心算法用于在因子分解时选择边或顶点。
2.3 DAG上的匈牙利算法
用于在有向无环图上寻找因子分解的算法。
2.4 Tutte定理
用于判断一个图是否存在完美匹配。
三、应用实例
1
3.1 二分图最大匹配的应用
《图论课件第五章匹配与 因子分解》PPT课件
图论课件第五章匹配与因子分解
一、匹配
1.1 定义
匹配指的是图中的一组边,这些边不相交并且 没有公共顶点。
1.3 最大匹配
最大匹配是图中包含边数最多的匹配。
1.2 匹配的分类
分类包括完美匹配、最大匹配和最小匹配。
1.4 匈牙利算法
匈牙利算法用于寻找二分图的最大匹配。
应用于任务分配、婚姻匹配等场景。
3.2 带权二分图匹配的应用
2
应用于资源分配、工作调度等场景。
3
3.3 双倍经验的关卡通关问题
使用匹配算法解决游戏中的关卡设计问
3.4 理发店问题
4
题。
利用匹配算法解决顾客理发需要和理发 师时间安排的问题。

四、参考资料
4.1 书籍
《图论导论》、《算法导论》等
4.3 网站
Grap h Alg orithm s, Grap h Theo ry Online等
4.2 论文
Graph Matching Alg orithm s: A C om prehensive C om parison
4.4 其他资源
相关研究报告、课程讲义等

二分图及匹配算法

二分图及匹配算法

Chapter 3
二分图最佳匹配
-二分图最佳匹配-
定义:图G中权值和最大的完全匹配。
Kuhn-Munkras算法:该算法是通过给每个顶点一个标号(叫做顶标) 来把求最大权匹配的问题转化为求完备匹配的问题的。设顶点Xi的顶标 为A[ i ],顶点Yj的顶标为B[ j ],顶点Xi与Yj之间的边权为w[i,j]。在算法 执行过程中的任一时刻,对于任一条边(i,j),A[ i ]+B[j]>=w[i,j]始终成立。 KM算法的正确性基于以下定理: 若由二分图中所有满足A[ i ]+B[j]=w[i,j]的边(i,j)构成的子图(称做相等 子图)有完备匹配,那么这个完备匹配就是二分图的最大权匹配。 KM算法流程: (1)初始化可行顶标的值; (2)用匈牙利算法寻找完备匹配; 这样做是O(n^4)的
-稳定婚姻问题-
Байду номын сангаас
求婚拒绝算法(Gale-Shapley算法/延迟认可算法): 先对所有男生进行单身标记,称其为单身狗男。当存在单身狗男时,进行 以下操作:
①选择一位单身狗男在所有尚未拒绝她的女生中选择一位被他排名最优先 的女神;
②女神将正在追求她的单身狗男与其现任进行比较,选择其中排名优先的 男生作为其男友,即若单身狗男优于现任,则现任被抛弃为前任;否则保 留其男友,拒绝单身狗男。 ③若某男生被其女友抛弃,则重新变成单身狗男,至①重复。
Chapter 5
稳定婚姻问题
-稳定婚姻问题-
你们班上有n位男生和n位女生,每个人对异性都有一个排序,表示对他们 的爱恋程度。现在你的任务是使他们凑成CP,使他们的爱情坚不可摧! 满足一下条件的爱情不是坚不可摧的: 男生u和女生v不是CP,但他们爱恋对方的程度都大于爱恋现任 的程度。 因为这样男生u和女生v会抛下已经是CP的那个她/他,另外组成一对。于 是乎多出了两位前任,这样就会让人再也无法相信爱情了! 怎么能避免悲剧的发生呢?
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

应用3
男孩在一边,女孩在一边 会产生恋爱关系的连边 找最大独立集
应用4
一共N个人参加聚会,某些人之间会产生恋爱关 系(一定是异性之间)。现在希望找到最多的人, 他们之间不会产生恋爱关系。
应用4
所有的人复制成两份放在两边 会产生恋爱关系的连边 最大独立集 = N – 最大匹配 / 2
应用10
任务不分先后相同模式的连续做 用的模式越少越好最少的模式完成所有任务 把模式看成点,A的模式放在一侧,B的模式放在
一侧。 对于某个任务,在它所要求的两个模式之间连边。 最小点覆盖集
二分图最佳匹 配
最佳匹配:如果G为加权二分图,则权值和 最大的完备匹配称为最佳匹配。
KM算法
KM算法是通过给每个顶点一个标号(叫做 顶标)来把求最大权匹配的问题转化为求 完备匹配的问题的。
二分图的匹配和图论
二分图
一个图的点集可以划分为两个不相交的子 集,每一个子集中的点和该子集中的其他 点没有边相连
二分图
一个图是二分图的充要条件是这个图里没 有奇环
二分图匹配
匹配:给定一个二分图G,M为G边集的一 个子集,如果M满足当中的任意两条边都 不依附于同一个顶点,则称M是一个匹配。
应用7
路径覆盖:路径覆盖就是在图中找一些路径,使 之覆盖了图中的所有顶点,且任何一个顶点有且 只有一条路径与之关联 。注意一个单独的点也是 一条路径。
现要求有向无环图的最小路径覆盖,即在一张有 向无环图中,找路径数最少的路径覆盖。
应用7
把每个顶点拆成两份,然后按原图连边。
应用7
最小路径覆盖 = n – 最大匹配 每一个匹配相当于原图中的某两个路径合并
应用8
在一个有向无环图上,至少放多少个机器人可以 遍历整个图?
注意点是可以重复经过的。
应用8
允许重复经过点的最小路径覆盖 如果经过一个重复的点我们可以假装跳过了它进
入下一个点 Floyed求出传递闭包再做最小路径覆盖
应用9
在一个N*M的矩形里,有一些格子被毁坏。现在 要求用1*2的木板去覆盖没有被毁坏的格子,木 板不可覆盖彼此,问是否能把每个格子都盖住。
应用9
所有没有被毁坏的格子都看成图中的点 按格子的“奇偶性”分成两类 如果两个格子相邻,则在这两个点上连边 若存在完备匹配则所有的格子可以被覆盖
应用10
A机器有n个模式,B机器有m个模式。 现有k个任务需要做,可以用A机器的某个模式做 或者用B机器的某个模式做。 任务不分先后,但是机器换模式需要重启。现在 求最少的重启次数。
应用6
现在要求最多的小孩,两两之间不矛盾 从矛盾关系入手 猫和猫之间,狗和狗之间一定不存在矛盾关系 如果A小孩喜欢的动物与B小孩讨厌的动物一样,
或者A小孩讨厌的动物与B小孩喜欢的动物一样, 那AB之间就存在着排斥关系,则他们之间连接一 条边(他们不可能同时开心) 求最大的点集,两两之间没有边 最大点独立集
(删除原属于M的边,增加不属于M的 边) O(nm)
匈牙利算法
匈牙利算法
匈牙利算法
应用1
点覆盖集:图的顶点集的子集,覆盖图中 所有的边
最小点覆盖:无向图中,求最少需要多少 个点可以覆盖所有的边。 NP
应用1
二分图的最小点覆盖
应用1
König定理: 二分图的最小点覆盖 = 最大匹配
应用1
假设最小点覆盖=N,最大匹配=M 考虑最大匹配中的边两两不相交,所以至
少需要M条边覆盖。 得N>=M
应用2
独立集: 图的顶点集的子集,其中任意两点 不相邻。
最大点独立集: 无向图中,求一个最大的顶 点集,其中任意两点不相邻。
NP
应用2
覆盖集的补集一定是独立集 证明:
假设某一覆盖集的补集不是独立集。 说明有一条边连接了覆盖集的补集的两个 点。那么这条边没有被覆盖集所覆盖,产 生矛盾。
应用2
独立集的补集一定是覆盖集 证明:
假设某一独立集的补集不是覆盖集。 说明有一条边不被独立集的补集覆盖,那 么这条边连接了独立集的两个端点,产生 矛盾。
应用2
覆盖集与独立集互为补集 二分图中可求出最大匹配M 最小覆盖集=M,最大独立集=n-M
应用3
一共N个男孩和女孩参加聚会,某些男孩和女孩 之间会产生恋爱关系。现在希望找到最多的孩子, 他们之间不会产生恋爱关系。
应用6
动物园有N只猫,M只狗,P个小孩。每个小孩都 有自己喜欢的和讨厌的动物。如果他喜欢狗,那 么就讨厌猫;如果他讨厌猫,那么他就喜欢狗。 每个小孩会说,我喜欢__号猫,讨厌__号狗;或 者说,我喜欢__号狗,讨厌__号猫。如果他喜欢 的那只动物被留下,而且讨厌的那只动物被带走, 他就会开心。请问最多有多少小孩能开心。
M-饱和点:对于v∈V(G),如果v与M中 的某条边关联,则称v是M-饱和点,否则称 v是非M-饱和点。
M-可增广路:p是一条M-交错路,如果p 的起点和终点都是非M-饱和点,则称p为 M-可增广路。
匈牙利算法
匈牙利算法
For all i in X: 1、从i出发寻找可增广路 2、沿增广路更新
最大匹配:所有匹配中边数最多的。 完备匹配:如果一个匹配中,图中的每个
顶点都和图中某条边相关联,则称此匹配 为完备匹配。
二分图匹配
Hall定理
一个二分图有完备匹配的充要条件是: 任意k个点相邻的点的集合中不少于k个点
匈牙利算法
M-交错路:p是G的一条通路,如果p中的 边为属于M中的边与不属于M的边交替出现, 则称p是一条M-交错路。
设顶点Xi的顶标为A[i],Yi的顶标为B[i], 顶点Xi与Yj之间的边权为w[i,j]。在算法执 行过程中的任一时刻,要求对于任一条边 (i,j),A[i]+B[ j]>=w[i,j]始终成立。
应用5
给你一个N*N的格子,每个格子里要么有一个陨 石,要么为空。每一次你可以清除一行或者一列 里的所有陨石,求最少要多少次才能把所有的陨 石清除干净。
X
X
Xቤተ መጻሕፍቲ ባይዱ
X
应用5
把N*N的格子看成是一个二分图,每一行是一个 集合的点,每一列是另一个集合的点,那么某个 格子(x,y)中有陨石就相当于顶点x到顶点y有一 条边,那么要求使陨石全部被清理掉的最少的次 数,就是要使该二分图中的所有边都被覆盖的最 少顶点数。 X XX X
相关文档
最新文档