zoukankan      html  css  js  c++  java
  • CODEVS1222 信与信封问题 (匈牙利算法)

    先做一遍匈牙利算法。对于已经匹配的边,如果删去之后还能最大匹配数增加,则不符合要求。

    一遍匈牙利算法是O(n^3)的,对于每一条边做n次,每次O(n^2),总的复杂度是O(n^3)。

    注意:不要忘记输出none。

     1 var a:array[0..1000,0..1000] of boolean;
     2     l,r:array[0..1000] of longint;
     3     pd:array[0..1000] of boolean;
     4     i,j,x,y,n,sum,num:longint;
     5 function find(i:longint):boolean;
     6 var j:longint;
     7 begin
     8     for j:=1 to n do
     9         if a[i,j] and not pd[j] then
    10         begin
    11             pd[j]:=true;
    12             if (l[j]=0) or find(l[j]) then
    13             begin
    14                 l[j]:=i;
    15                 r[i]:=j;
    16                 exit(true);                
    17             end;
    18         end;
    19     exit(false);
    20 end;
    21 begin
    22     fillchar(a,sizeof(a),true);
    23     readln(n);
    24     readln(x,y);
    25     while not ((x=0) and (y=0)) do
    26     begin
    27         a[x,y]:=false;
    28         readln(x,y);
    29     end;
    30     fillchar(l,sizeof(l),0);
    31     fillchar(r,sizeof(r),0);
    32     sum:=0;
    33     for i:=1 to n do
    34     begin
    35         fillchar(pd,sizeof(pd),false);
    36         if find(i) then inc(sum);
    37     end;
    38     num:=0;
    39     for i:=1 to n do
    40     begin
    41         fillchar(pd,sizeof(pd),false);
    42                 j:=r[i];
    43         a[i,j]:=false;
    44         r[i]:=0; l[j]:=0;
    45         if not find(i) then begin inc(num); writeln(i,' ',j); end;
    46         a[i,j]:=true;
    47         r[i]:=j; l[j]:=i;
    48     end;    
    49     if num=0 then writeln('none');
    50 end.
  • 相关阅读:
    spring
    SpringMVC 配置与使用
    基本MVC2模式创建新闻网站
    EL表达式
    JavaBeans介绍
    JSP简介
    Cookie与Session的异同
    过滤器的使用
    session的使用
    最长回文子串
  • 原文地址:https://www.cnblogs.com/rpSebastian/p/4183301.html
Copyright © 2011-2022 走看看