描述
貝西希望通過乙個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 鎖定這顆小行星幹什麼用呢?這裡面的學問非常大。我們知道。小行星體積儘管非常小,可是,它的年齡卻與我們太陽系差點兒 同齡 因此,研究小行星將有助於我們加深對太陽...