匈牙利算法(Edmonds算法)步聚:
(1)首先用(*)标记X中所有的非M顶点,然后交替进行步骤(2),(3)。
(2)选取一个刚标记(用(*)或在步骤(3)中用(yi)标记)过的X中顶点,例如顶点xi,如果xi与y为同一非匹配边的两端点,且在本步骤中y尚未被标记过,则用(xi)去标记Y中顶点y。
重复步骤(2),直至对刚标记过的X中顶点全部完成一遍上述过程。
(3)选取一个刚标记(在步骤(2)中用(xi)标记)过的Y中结点,例如yi,如果yi与x为同一匹配边的两端点,且在本步骤中x尚未被标记过,则用(yi)去标记X中结点x。
重复步骤(3),直至对刚标记过的Y中结点全部完成一遍上述过程。
(2),(3)交替执行,直到下述情况之一出现为止:
(I)标记到一个Y中顶点y,它不是M顶点。
这时从y出发循标记回溯,直到(*)标记的X中顶点x,我们求得一条交替链。
设其长度为2k+1,显然其中k条是匹配边,k+1条是非匹配边。
(II)步骤(2)或(3)找不到可标记结点,而又不是情况(I)。
(4)当(2),(3)步骤中断于情况(I),则将交替链中非匹配边改为匹配边,原匹配边改为非匹配边(从而得到一个比原匹配多一条边的新匹配),回到步骤(1),同时消除一切现有标记。
(5)对一切可能,(2)和(3)步骤均中断于情况(II),或步骤(1)无可标记结点,算法终止(算法找不到交替链).
以上算法说穿了,就是从二分图中找出一条路径来,让路径的起点和终点都是还没有匹配过的点,并且路径经过的连线是一条没被匹配、一条已经匹配过交替出现。在匈牙利算法中,我們每次尋找一條增廣路來增加匹配集合M.可以證明,每次找增廣路的複雜度是,一共需要增廣次,因此總時間複雜度為.為了降低時間複雜度,在Hopcroft Karp算法中,我們在增加匹配集合M時,每次尋找多條增廣路.可以證明,這樣迭代次數最多為,所以,時間複雜度就降到了.
該算法由John E.Hopcroft和Richard M.Karp於1973年提出,故稱Hopcroft Karp算法.
program Project1; const maxn=1000; var dx,dy,mx,my,q:array[1..maxn]of longint; adj:array[1..maxn,0..maxn]of longint; n,m,e,i,j,ans,ff,rr:longint; function bfs:boolean; var i,u,j:longint; begin bfs:=false; fillchar(q,sizeof(q),0); rr:=1; ff:=1; for i:=1 to n do begin if mx[i]=-1 then begin q[ff]:=i; inc(ff); end; dx[i]:=0; dy[i]:=0; end; while rr<ff do begin u:=q[rr]; inc(rr); for j:=1 to adj[u][0]do begin i:=adj[u][j]; if dy[i]=0 then begin dy[i]:=dx[u]+1; if my[i]=-1 then bfs:=true else begin dx[my[i]]:=dy[i]+1; q[ff]:=my[i]; inc(ff); end; end; end; end; end; function dfs(x:longint):boolean; var i,j:longint; begin for j:=1 to adj[x][0]do begin i:=adj[x][j]; if dy[i]=dx[x]+1 then begin dy[i]:=0; if(my[i]=-1)or dfs(my[i]) then begin mx[x]:=i; my[i]:=x; exit(true); end; end; end; exit(false); end; begin readln(n,m,e); for i:=1 to e do begin readln(ff,rr); inc(adj[ff][0]); adj[ff][adj[ff][0]]:=rr; end; for i:=1 to n do begin mx[i]:=-1; my[i]:=-1; end; ans:=0; while bfs do for i:=1 to n do if(mx[i]=-1)and(dfs(i)) then inc(ans); writeln(ans); end.
美国服务器哪家平台好?美国服务器无需备案,即开即用,上线快。美国服务器多数带防御,且有时候项目运营的时候,防御能力是用户考虑的重点,特别是网站容易受到攻击的行业。现在有那么多美国一年服务器,哪家的美国云服务器好呢?美国服务器用哪家好?这里推荐易探云,有美国BGP、美国CN2、美国高防、美国GIA等云服务器,线路优化的不错。易探云刚好就是做香港及美国云服务器的主要商家之一,我们来看一下易探云美国云服...
imidc对日本独立服务器在搞特别促销,原价159美元的机器现在只需要88美元,而且给13个独立IPv4,30Mbps直连带宽,不限制流量。注意,本次促销只有一个链接,有2个不同的优惠码,你用不同的优惠码就对应着不同的配置,价格也不一样。88美元的机器,下单后默认不管就给512G SSD,要指定用HDD那就发工单,如果需要多加一个/28(13个)IPv4,每个月32美元...官方网站:https:...
柚子互联官网商家介绍柚子互联(www.19vps.cn)本次给大家带来了盛夏促销活动,本次推出的活动是湖北十堰高防产品,这次老板也人狠话不多丢了一个6.5折优惠券而且还是续费同价,稳撸。喜欢的朋友可以看看下面的活动详情介绍,自从站长这么久以来柚子互联从19年开始算是老商家了。六五折优惠码:6kfUGl07活动截止时间:2021年9月30日客服QQ:207781983本次仅推荐部分套餐,更多套餐可进...