小行星 SSL 1341(最大匹配)

2021-08-13 19:22:07 字數 1741 閱讀 2311

描述

貝西希望通過乙個n×n網格(1 <= n <= 500)形狀的危險小行星場來駕駛她的飛船。網格包含k個小行星(1 <= k <= 10,000),位於網格的格點處。

幸運的是,貝西有乙個強大的**,可以在任何給定的行或列中的乙個單一的射擊汽化所有的小行星。這個**是相當昂貴的,所以她希望使用它節省。給所有的小行星的位置找到貝西需要射擊的最小射擊數量,以消除所有的小行星。

輸入*第1行:兩個整數n和k,由乙個空格隔開。

*第2行… k + 1:每行包含兩個空格分隔的整數r和c(1 <= r,c <= n),分別表示小行星的行列座標。

產量*第1行:表示貝西必須射擊的最少次數的整數。

示例輸入

3 4

1 1

1 3

2 2

3 2示例輸出

暗示輸入詳細資訊:

下圖表示資料,其中「x」是小行星和「。」 是空格:

xx .x。

。x。

輸出細節:

貝西可能在第一行**,摧毀(1,1)和(1,3)處的小行星,然後她可能向第二列**,毀壞(2,2)和(3,2)處的小行星。 。

題目在意如下:

題目給出乙個矩陣,上面有敵人,每個子彈可以打出一橫行或者一豎行,問最少用多少子彈消滅都有敵人,如:

xx .x。

。x。

x表示敵人,顯然用兩個子彈就可以解決所有敵人。

var

a:array[0..501,0..501] of boolean;

i,j,n,m,k,ans,x,y:longint;

link:array[0..501] of longint;

cover:array[0..501] of boolean;

function

find

(x:longint):boolean;

vark,q:longint;

begin

find:=true;

for k:=1

to n do

if a[x,k] and

not(cover[k]) then

begin

q:=link[k]; link[k]:=x; cover[k]:=true;

if (q=0) or (find(q)) then

exit;

link[k]:=q;

end;

find:=false;

end;

procedure

main;

var i:longint;

begin

for i:=1

to n do

begin

fillchar(cover,sizeof(cover),false);

find(i);

end;

end;

begin

readln(n,m);

fillchar(a,sizeof(a),false);

for i:=1

to m do

begin

readln(x,y);

a[x,y]:=true;

end;

main;

for i:=1

to n do

if link[i]<>0

then inc(ans);

writeln(ans);

end.

Usaco 小行星群

bessie想駕駛她的飛船穿過危險的小行星群,小行星群是乙個n n的網格 1 n 500 在網格內有k個小行星 1 k 10,000 幸運地是bessie有乙個很強大的 一次可以消除所有在一行或一列中的小行星,這種 很貴,所以她希望盡量地少用。給出所有的小行星的位置,算出bessie最少需要多少次射...

最大匹配 小行星

貝西想以n x n網格 1 n 500 的形狀在危險的小行星場中導航她的飛船。網格包含k個小行星 1 k 10,000 它們方便地位於網格的晶格點處。幸運的是,貝茜擁有強大的 可以一擊就蒸發掉網格中任何給定行或列中的所有小行星,這種 非常昂貴,因此她希望謹慎使用。欄位中,找到貝西需要射擊以消除所有小...

找準目標,捕捉小行星行動正式開始

請看下圖 依據6月19日最新訊息。這是今年 2月美國宇航局 nasa 使用spitz 航天望遠鏡鎖定的一顆小行星 位於 的紅色斑點 nasa 鎖定這顆小行星幹什麼用呢?這裡面的學問非常大。我們知道。小行星體積儘管非常小,可是,它的年齡卻與我們太陽系差點兒 同齡 因此,研究小行星將有助於我們加深對太陽...