专栏首页HansBug's Lab算法模板——二分图匹配

算法模板——二分图匹配

实现功能为二分图匹配

原理:匈牙利算法,核心思想——匹配上了就配,没直接匹配上也要通过前面的腾出位置让这个匹配上(详见:趣写算法系列之——匈牙利算法)

本程序以Codevs2776为例

详见Codevs2776

 1 type
 2     point=^node;
 3     node=record
 4                g:longint;
 5                next:point;
 6     end;
 7 var
 8    i,j,k,l,m,n:longint;
 9    c,f:array[0..1000] of longint;
10    a:array[0..1000] of point;
11 procedure add(x,y:longint);inline;
12           var p:point;
13           begin
14                new(p);
15                p^.g:=y;
16                p^.next:=a[x];
17                a[x]:=p;
18           end;
19 function check(x:longint):boolean;inline;
20          var p:point;
21          begin
22               p:=a[x];
23               while p<>nil do
24                     begin
25                          if f[p^.g]<>i then
26                             begin
27                                  f[p^.g]:=i;
28                                  if c[p^.g]=0 then
29                                     begin
30                                          c[p^.g]:=x;
31                                          exit(true);
32                                     end
33                                  else if check(c[p^.g]) then
34                                       begin
35                                            c[p^.g]:=x;
36                                            exit(true);
37                                       end;
38                             end;
39                          p:=p^.next;
40                     end;
41               exit(false);
42          end;
43 
44 {$IFDEF WINDOWS}{$R wiki2776.rc}{$ENDIF}
45 
46 begin
47      readln(n,m);
48      for i:=1 to n do
49          begin
50               a[i]:=nil;
51               while not(eoln) do
52                     begin
53                          read(j);
54                          if j=0 then break;
55                          add(i,j);
56                     end;
57               readln;
58          end;
59      fillchar(c,sizeof(c),0);
60      fillchar(f,sizeof(f),0);l:=0;
61      for i:=1 to n do
62          if check(i) then inc(l);
63      writeln(l);
64      readln;
65 end.
66        

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Codevs2776 寻找代表元

    2776 寻找代表元  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题目描述 Description 广州二中苏元实...

    HansBug
  • 1637: [Usaco2007 Mar]Balanced Lineup

    1637: [Usaco2007 Mar]Balanced Lineup Time Limit: 5 Sec  Memory Limit: 64 MB Subm...

    HansBug
  • 算法模板——Dinic网络最大流 1

    实现功能:同sap网络最大流 今天第一次学Dinic,感觉最大的特点就是——相当的白话,相当的容易懂,而且丝毫不影响复杂度,顶多也就是代码长个几行 主要原理就是...

    HansBug
  • Codevs2776 寻找代表元

    2776 寻找代表元  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题目描述 Description 广州二中苏元实...

    HansBug
  • 2953: [Poi2002]商务旅行

    2953: [Poi2002]商务旅行 Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 8  Solved: 8...

    HansBug
  • 3386/1752: [Usaco2004 Nov]Til the Cows Come Home 带奶牛回家

    3386/1752: [Usaco2004 Nov]Til the Cows Come Home 带奶牛回家 Time Limit: 1 Sec  Memory...

    HansBug
  • 算法模板——线段树7(骰子翻转问题)

    实现功能:首先输入一个长度为N的序列,由1-4组成(1表示向前滚一下,2表示向后滚一下,3表示向左滚一下,4表示向右滚一下,骰子原始状态:上1前2左4右5后3下...

    HansBug
  • Delphi 编写 数字签名验证 并获取签名信息

    一个客户想通过编程实现验证程序自身的数字签名来确保程序的完整性,防范病毒感染以及防止一些无聊人士的修改(通过十六进制编辑器替换一些版权、网址、LOGO..); ...

    战神伽罗
  • iis发布后模板字体不能加载的解决方案

    3、在使用H+模板的时候又出现了问题,然后前两种都没能解决问题,因为mvc的原因,

    易墨
  • 要搞懂大数据和人工智能的关系,先分清这两个概念

    AI起跑线原创文章 ? 海豚小号 欢迎关注 大数据和人工智能,是近年来无处不在的两个超级热词。 很多小伙伴只知道这两个概念都是IT领域的新科技,但不太清楚,它...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券