65 条题解

  • 0
    @ 2009-08-30 10:23:58

    匈牙利算法

    bool can(int x)

    {

    for (int i=1; i

  • 0
    @ 2009-08-14 14:42:40

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    建立二分图模型求最大匹配即可!

  • 0
    @ 2009-08-04 21:45:48

    我真郁闷啊!PUPPY超了三个点,无输出.6K一下就过了!

    还有就是要把V数组清空,不然只有十分!

  • 0
    @ 2009-08-03 19:45:41

    贪心也可以,不知道算法对不对

  • 0
    @ 2009-07-30 21:47:54

    被数据鄙视了!!!!

    一开始用链表写SAP,死活只有60.

    后来怒了,改回数组,立刻0msAC.

    不解,望大牛指点...

  • 0
    @ 2009-07-21 19:03:08

    Accepted 有效得分:100 有效耗时:0ms

    不得不说,匈牙利算法很漂亮……

  • 0
    @ 2009-06-30 13:44:57

    genein好像有问题……

    like this:

    1 1 1 1 1 1 1 1 1 1

    1 0 0 0 0 0 0 0 0 0

    1 0 0 0 0 0 0 0 0 0

    1 0 0 0 0 0 0 0 0 0

    1 0 0 0 0 0 0 0 0 0

    1 0 0 0 0 0 0 0 0 0

    1 0 0 0 0 0 0 0 0 0

  • 0
    @ 2009-06-20 16:14:48

    var n,m,x,y,hh,ll,xx,yy,time,max,ha:longint;

    a:array[1..1000,1..1000] of char;

    h,l:array[1..1000] of integer;

    flg:boolean;

    begin

    readln(n,m);

    hh:=0;

    ll:=0;

    for x:= 1 to n do

    begin

    for y:= 1 to m do

    begin

    read(a[x,y]);

    if a[x,y] = '1' then

    begin

    if h[x] = 0 then inc(hh);

    if l[y] = 0 then inc(ll);

    inc(h[x]);

    inc(l[y]);

    end;

    end;

    readln;

    end;

    time:=0;

    repeat

    max:=0;

    for x:= 1 to n do

    if h[x] > max then begin max:=h[x] ; xx:=x; ha:=1; end;

    for x:= 1 to m do

    if l[x] > max then begin max:=l[x] ; xx:=x; ha:=2; end;

    if ha= 1 then

    begin

    h[xx]:=0;

    inc(time);

    for x:= 1 to m do

    if a[xx,x] = '1' then begin dec(l[x]); a[xx,x]:='0'; end;

    end;

    if ha= 2 then

    begin

    l[xx]:=0;

    inc(time);

    for x:= 1 to n do

    if a[x,xx] = '1' then begin dec(h[x]); a[x,xx]:='0'; end;

    end;

    flg:=true;

    for x:= 1 to n do

    for y:= 1 to m do

    if a[x,y] = '1' then flg:=false;

    until flg;

    if hh > ll then hh:=ll;

    if hh > time then hh:=time;

    writeln(hh);

    end.

    先统计有多少行有1

    再统计有多少列有1

    取最小值

    再贪心一变

    再取最小值

    可以过9组........

  • 0
    @ 2009-05-19 19:55:26

    基本懂得了 匈牙利算法

    祝贺 !!!!!!!!!!!!!!!!!!!!

  • 0
    @ 2009-05-18 12:53:08
  • 0
    @ 2009-05-15 17:02:23

    最小点覆盖

  • 0
    @ 2009-05-12 20:42:01

    取矩阵对应行列中一的个数最少的输出即可,例如:

    1000

    0100

    1000

    0001

    四行有1,三列有1,则输出3

  • 0
    @ 2009-04-20 21:25:39

    题目描述有问题,不是M*N,而是N*M,N是行数,M是列数

  • 0
    @ 2009-03-30 13:39:38

    调了N次,交了N次,原来是数组开小了。

    最大流

  • 0
    @ 2009-02-07 12:43:53

    二分图

    左边是行,右边是列,如果a是点,就把i和j连上,然后求这个图的最大匹配。因为最大匹配等于最小顶点覆盖。

    输入第一个是行,第二个是列

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  • 0
    @ 2009-01-28 22:44:49

    二分图连个源汇,求最小割

    我第一次写Dinic居然写对了……泪流满面……ToT

  • 0
    @ 2009-01-10 10:42:49

    想了半天才想到用二分图匹配试试看,结果就AC了。。。

  • 0
    @ 2009-01-05 20:15:18

    终于把匈牙利算法搞懂了...

  • 0
    @ 2009-01-03 15:41:55

    将凸出来的方格的行号和列号连一条边,建成一个图。

    问题即为求这个图的最小点覆盖,再转换成求最大二分图匹配,用匈牙利算法完成即可。

信息

ID
1204
难度
5
分类
图结构 | 二分图 点击显示
标签
递交数
1551
已通过
530
通过率
34%
被复制
7
上传者