二分图匹配(指派问题)

网友投稿 793 2022-11-12

二分图匹配(指派问题)

二分图匹配(指派问题)

指派问题:

有N台计算机和K个任务,我们可以给每台计算机分配一个任务,每台计算机能够处理的任务种类不同,请求出最多能够处理的任务的个数。

思路:二分图匹配,可以这样来定义无向二分图,G=(UuV,E);

U 代表计算机的顶点集合,V代表任务的顶点集合,对于任意u属于U和v属于V,计算机u能够处理的任务v<=>(u,v)属于E

二分图例子:

对原图做如下改变:

将原图中所有无向边e改为有向边,方向从U到V,容量1,增加源点s和汇点t,从s向所有的顶点u属于U连一条容量为1的边,从所有的顶点V属于V向t连一条容量1的边。

如此变形得到的新图G‘中最大的s-t流的流量就是原二分图中G的最大匹配,而U-V 之间的流量为正的边集合就是最大匹配,算法复杂度:O(|V||E|)。

代码实现:

int N,K,i,j;bool can[maxn][maxn]; // can[i][j] 表示计算机i 能处理任务j. void solve(){ // 0~N-1 : 计算机对应的顶点 // N~N+K-1 : 任务对应的顶点 int source=N+K,sink=s+1; for(int i=0; i

When you want to give up, think of why you persist until now!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Vim 编辑器 初学(2)
下一篇:POJ 2472 &&ZOJ 2797 (106 miles to Chicago)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~