65 条题解
-
0txyx LV 10 @ 2009-08-30 10:23:58
匈牙利算法
bool can(int x)
{
for (int i=1; i -
02009-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
建立二分图模型求最大匹配即可! -
02009-08-05 16:09:45@
-
02009-08-04 21:45:48@
我真郁闷啊!PUPPY超了三个点,无输出.6K一下就过了!
还有就是要把V数组清空,不然只有十分! -
02009-08-03 19:45:41@
贪心也可以,不知道算法对不对
-
02009-07-30 21:47:54@
被数据鄙视了!!!!
一开始用链表写SAP,死活只有60.
后来怒了,改回数组,立刻0msAC.
不解,望大牛指点... -
02009-07-21 19:03:08@
Accepted 有效得分:100 有效耗时:0ms
不得不说,匈牙利算法很漂亮…… -
02009-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 -
02009-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组........
-
02009-05-19 19:55:26@
基本懂得了 匈牙利算法
祝贺 !!!!!!!!!!!!!!!!!!!!
-
02009-05-18 12:53:08@
-
02009-05-15 17:02:23@
最小点覆盖
-
02009-05-12 20:42:01@
取矩阵对应行列中一的个数最少的输出即可,例如:
1000
0100
1000
0001
四行有1,三列有1,则输出3 -
02009-04-20 21:25:39@
题目描述有问题,不是M*N,而是N*M,N是行数,M是列数
-
02009-03-30 13:39:38@
调了N次,交了N次,原来是数组开小了。
最大流 -
02009-02-07 12:43:53@
二分图
左边是行,右边是列,如果a是点,就把i和j连上,然后求这个图的最大匹配。因为最大匹配等于最小顶点覆盖。输入第一个是行,第二个是列
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -
02009-01-28 22:44:49@
二分图连个源汇,求最小割
我第一次写Dinic居然写对了……泪流满面……ToT -
02009-01-10 10:42:49@
想了半天才想到用二分图匹配试试看,结果就AC了。。。
-
02009-01-05 20:15:18@
终于把匈牙利算法搞懂了...
-
02009-01-03 15:41:55@
将凸出来的方格的行号和列号连一条边,建成一个图。
问题即为求这个图的最小点覆盖,再转换成求最大二分图匹配,用匈牙利算法完成即可。