description
有乙個m * n的棋盤,有的格仔是障礙。現在你要選擇一些格仔來放置一些士兵,乙個格仔裡最多可以放置乙個士兵,障礙格里不能放置士兵。我們稱這些士兵占領了整個棋盤當滿足第i行至少放置了li個士兵, 第j列至少放置了cj個士兵。現在你的任務是要求使用最少個數的士兵來占領整個棋盤。
input
第一行兩個數m, n, k分別表示棋盤的行數,列數以及士兵的個數。 第二行有m個數表示li。 第三行有n個數表示ci。 接下來有k行,每行兩個數x, y表示(x, y)這個格仔是障礙。
output
輸出乙個數表示最少需要使用的士兵個數。如果無論放置多少個士兵都沒有辦法占領整個棋盤,輸出」jiong!」 (不含引號)
sample input
4 4 4
1 1 1 1
0 1 0 3
1 42 2
3 34 3
sample output
資料範圍
m, n <= 100, 0 <= k <= m * n
看資料範圍,應該可以用網路流吧,但是他要最小化,於是我們就機智地轉換成先填滿然後最大限度的拿掉士兵就行了
每一列建乙個點,每一行建乙個點,能拿掉的士兵就從對應的行向列連一條容量為1的邊,行和列加上容量限制(就是最多可以拿掉多少)
1view codeconst
2 maxn=110;3
var4 map:array[0..maxn*2,0..maxn*2]of
longint;
5 dis,his,vh,pre:array[0..maxn*2]of
longint;
6n,m,k,s,t,flow:longint;78
procedure
init;
9var
10i,j,x,y:longint;
11begin
12read(n,m,k);
13 s:=0
;14 t:=n+m+1;15
for i:=1
to n do
16begin
17read(map[s,i]);
18 map[s,i]:=m-map[s,i];
19end;20
for i:=1
to m do
21begin
22 read(map[i+n,t]);
23 map[i+n,t]:=n-map[i+n,t];
24end;25
for i:=1
to n do
26for j:=1
to m do
27 map[i,j+n]:=1;28
for i:=1
to k do
29begin
30read(x,y);
31 dec(map[x,y+n]);
32dec(map[s,x]);
33 dec(map[y+n,t]);
34if (map[s,x]<0) or (map[y+n,t]<0) then
35begin
36 writeln('
jiong!');
37halt;
38end;39
end;
40end;41
42procedure
sap;
43var
44i,j,min,aug:longint;
45flag:boolean;
46begin
47 vh[0]:=t+1
;48 aug:=maxlongint;
49 i:=0;50
while dis[i]<=t do
51begin
52 his[i]:=aug;
53 flag:=false;
54for j:=0
to t do
55if (dis[j]+1=dis[i]) and (map[i,j]>0) then
56begin
57 flag:=true;
58if aug>map[i,j] then aug:=map[i,j];
59 pre[j]:=i;
60 i:=j;
61if i=t then
62begin
63inc(flow,aug);
64while i<>s do
65begin
66inc(map[i,pre[i]],aug);
67dec(map[pre[i],i],aug);
68 i:=pre[i];
69end
;70 aug:=maxlongint;
71end;72
break;
73end;74
if flag then
continue;
75 min:=t;
76for j:=0
to t do
77if (map[i,j]>0) and (dis[j]then min:=dis[j];
78dec(vh[dis[i]]);
79if vh[dis[i]]=0
then
break;
80 dis[i]:=min+1
;81 inc(vh[min+1
]);82
if i<>s then
83begin
84 i:=pre[i];
85 aug:=his[i];
86end;87
end;
88 writeln(n*m-k-flow);
89end;90
91begin
92init;
93sap;
94end.
BZOJ 1458 士兵占領
time limit 10 sec memory limit 64 mb submit 632 solved 366 submit status discuss description 有乙個m n的棋盤,有的格仔是障礙。現在你要選擇一些格仔來放置一些士兵,乙個格仔裡最多可以放置乙個士兵,障礙格里不...
bzoj 1458 士兵占領
time limit 10 sec memory limit 64 mb submit 784 solved 458 submit status discuss 有乙個m n的棋盤,有的格仔是障礙。現在你要選擇一些格仔來放置一些士兵,乙個格仔裡最多可以放置乙個士兵,障礙格里不能放置士兵。我們稱這些士...
bzoj1458 士兵占領
time limit 10 sec memory limit 64 mb submit 685 solved 398 submit status discuss 有乙個m n的棋盤,有的格仔是障礙。現在你要選擇一些格仔來放置一些士兵,乙個格仔裡最多可以放置乙個士兵,障礙格里不能放置士兵。我們稱這些士...