背景background
隨著時代的演進,
困難的刑案也不斷增加
...但真相只有乙個雖然變小了
,頭腦還是一樣好
,這就是名偵探柯南
!
描述description
面對oibh
組織的囂張氣焰
,柯南決定深入牛棚
,一探虛實
.他經過深思熟慮,
決定從oibh
組織大門進入
...........
oibh組織的大門有乙個很神奇的鎖
.鎖是由m*n
個格仔組成
,其中某些格仔凸起
(灰色的格仔
).每一次操作可以把某一行或某一列的格仔給按下去
如果柯南能在組織限定的次數內將所有格仔都按下去,
那麼他就能夠進入總部.但是
oibh
組織不是吃素的
,他們的限定次數恰是最少次數.
請您幫助柯南計算出開給定的鎖所需的最少次數.
輸入格式input format
第一行 兩個不超過100
的正整數
n, m
表示矩陣的長和寬
以下n行 每行
m個數 非0即
1 1為凸起方格
輸入樣例:
4 4
0000
0101
0000
0100
輸出樣例:2
思路:
最小覆蓋問題:
給定乙個二分圖,求最小的點數,使得每一條邊都至少與乙個頂點相鄰。
solution:
可以證明:二分圖最小覆蓋數=
最大匹配數。
證明:
假設最大匹配邊數為m
1.m是足夠的。因為如果存在邊
e未與頂點相連,則
e可以匹配,此時不是最大匹配。
2.m是必須的。僅考慮構成最大匹配的
m條邊,他們兩兩無公共點,所以需要
m個頂點覆蓋他們。
看不懂?好吧。簡而言之,對於i行j
列有按鈕的格仔連邊
i->j
,然後求最大匹配數。
源**/pas
:
type
edge=record
x,y,next:longint;
end;
var e:array[1..10000]of edge;
link,ls:array[1..100]of longint;
v:array[1..100]of boolean;
maxe,n,m:longint;
procedure add(x,y:longint);
begin
inc(maxe);
e[maxe].x:=x;
e[maxe].y:=y;
e[maxe].next:=ls[x];
ls[x]:=maxe;
end;
function find(x:longint):boolean;
var i,k:longint;
begin
find:=true;
i:=ls[x];
while i>0 do
with e[i] do
begin
if not v[y] then
begin
k:=link[y];
link[y]:=x;
v[y]:=true;
if (k=0)or find(k) then exit;
link[y]:=k;
end;
i:=next;
end;
find:=false;
end;
procedure main;
var i,ans:longint;
begin
ans:=0;
fillchar(link,sizeof(link),0);
for i:=1 to n do
begin
fillchar(v,sizeof(v),false);
if find(i) then inc(ans);
end;
writeln(ans);
end;
procedure init;
var i,j:longint;
s:string;
begin
readln(n,m);
for i:=1 to n do
begin
readln(s);
for j:=1 to m do
if s[j]='1' then
add(i,j);
end;
end;
begin
init;
main;
end.
vijos p1204 CoVH之柯南開鎖
隨著時代的演進,困難的刑案也不斷增加.但真相只有乙個 雖然變小了,頭腦還是一樣好,這就是名偵探柯南 covh06 面對oibh組織的囂張氣焰,柯南決定深入牛棚,一探虛實.他經過深思熟慮,決定從oibh組織大門進入.oibh組織的大門有乙個很神奇的鎖.鎖是由m n個格仔組成,其中某些格仔凸起 灰色的格...
名偵探柯南
題目1399 名偵探柯南 題目描述 大家一定都看過 名偵探柯南 我最開始看的是 版本的,後來出了漫畫版本,現在又有了動畫片的版本。引用彪叔的一條飛信 做男人就要做柯南。變得了正太,飈的到女聲 學得好化學,射的了麻醉 踢得好足球,玩得好極限 破得了大案,幹得過 開得了飛機,躲得過機槍 停得了 引得了雪...
流放者柯南rust 流放者柯南遊戲評測
流放者柯南遊戲評測 遊戲介紹 這是一款沙盒類開放世界遊戲,其實如果說這款遊戲和其他遊戲有什麼相似的地方的話,我只能說出3款遊戲,rust,方舟還有堡壘火焰之鍊,首先相似不能算作抄襲,因為這款遊戲內容確實比其他這一類的遊戲強很多,風格上來說,算是魔幻中世紀風格,哥德式風格的建築,大量的古遺跡,以中世紀...