刪邊刪邊
刪邊description
連通圖是指任意兩個頂點都有路徑可互相到達的圖。
讀入乙個無向的連通圖,輸出最多能刪掉多少條邊,使這個圖仍然連通。
input
第一行為圖的頂點數n(1<=n<=100)和邊數m,用乙個空格隔開,圖中的頂點用1到n的整數)編號。接下來的m行,每行用兩個數v1,v2表示一條邊。v1,v2用乙個空格隔開,表示這條邊所連線的頂點的編號(v1<>v2),同一條邊不會重複出現。
output
輸出最多能刪掉的邊數。
sample input
4 6
1 21 3
1 42 3
2 43 4
sample output
3
本人一眼最小生成樹,打崩了只有 75pts 。(我就是要打 prim !)
這題實際上很是簡單,只要考慮 n 和 m 就行了。
答案其實就是 m-(n-1),因為要使刪掉的邊最多,那麼只需要把給定的圖除一棵最小生成樹上的邊全部刪掉即可,如此一來剩下的邊一定是 n-1 條。
var n,m:longint;
begin
read
(n,m)
;write
(m-n+1)
;end.
騎士問
題騎士問題
騎士問題
description
在乙個標準 8*8 的西洋棋棋盤上,棋盤中有些格仔可能是有障礙物的。已知騎士的初始位置和目標位置,你的任務是計算騎士最少需要多少步可以從初始位置到達目標位置。有障礙物的格仔當然不可以到達。
標準的8*8的西洋棋中每乙個格仔可以用唯一的編號確定。行用1-8這8個數字依次表示,列用』a』-』h』這8個字母依次表示。例如左下圖的騎士所在位置(圖中有n的格仔)的編號為「d4」(注意『d』和『4』之間沒有空格)。
我們知道西洋棋中的騎士可以按「l」路線移動(乙個方向走2個格仔,接著垂直方向走1個格仔)。因此,如左上圖中的騎士(位於d4),可以到達位置c2,b3,b5,c6,e6,f5,f3,e2(圖中有『x』標記的格仔)。此外,騎士不能夠移出棋盤。
騎士可以按照移動規則自由地在棋盤上沒有障礙物的格仔中移動。右上圖給出了乙個騎士移動的例子。初始格仔用『n』標記,目標格仔用『n』標記,有障礙物的格仔用『b』標記。乙個可行的移動序列在圖中用數字標記出來。(a1,b3,a5,c6,e5,g4,h2,f1)。總共需要7步才能完成。事實上,這也就是最小的步數了。
input
輸入檔案包括1個或多個測試資料。
每乙個測試資料的第一行是乙個整數b(-1<=b<=62),表示棋盤中有障礙物的格仔數目,當b=-1時,輸入檔案結束。
第二行含b個不同的障礙物的格仔編號,用空格隔開。當b=0時,此行為空行。
第三行是騎士的初始格仔和目標格仔的編號,也是用空格隔開。初始格仔和目標格仔是不同的,且都沒有障礙物。
output
對於每個資料,輸出一行。格式:board n: m moves,其中n表示資料的序號(從1開始)m表示騎士所用的最小的步數。
如果騎士無法到達目標格仔,輸出:board n: not reachable
sample input
10
c1 d1 d5 c2 c3 c4 d2 d3 d4 c5
a1 f1
0c1 b3
2b3 c2
a1 b2
-1
sample output
board 1: 7 moves
board 2: 1 moves
board 3: not reachable
爆力列舉 8 個位置 dfs 即可,判斷當前的步數是否比歷史的步數小來剪枝。
把讀入的字母預處理成數字會比較方便。
const go:array[
1..8,1.
.2] of longint=((
-2,-
1),(
-1,-
2),(
-2,1
),(-
1,2)
,(1,
-2),
(2,-
1),(
2,1)
,(1,
2));
var b,i,j,x,y,sx,sy,ex,ey,min:longint;
maze:array[
0..15,0.
.15] of boolean;
flag:array[
0..15,0.
.15] of longint;
ch:char
; s:string;
procedure search
(x,y,t:longint)
;var i,xx,yy:longint;
begin
if(t[y])
or(flag[x]
[y]=
0) then
begin
flag[x]
[y]:
=t; end
else
begin
exit;
end;
if(x=ex)
and(y=ey) then
begin
if tbegin
min:
=t; end;
exit;
end;
for i:
=1 to 8
do begin
xx:=x+go[i][1
];yy:
=y+go[i][2
];if(xx>0)
and(yy>0)
and(xx<=8)
and(yy<=8)
and(
not maze[xx]
[yy]
) then
begin
search
(xx,yy,t+1)
; end;
end;
end;
begin
repeat
readln
(b);
if b=
-1 then
begin
halt;
end;
j:=j+1
;fillchar
(maze,
sizeof
(maze),0
);readln
(s);
for i:
=1 to length
(s)do
begin
if s[i] in [
'a'.
.'h'
] then
begin
x:=ord
(s[i])-
96;end
else
if s[i] in [
'1'.
.'8'
] then
begin
y:=ord
(s[i])-
48;maze[x]
[y]:
=true
; end;
end;
readln
(s);
sx:=ord
(s[1])
-96; sy:
=ord
(s[2])
-48; ex:
=ord
(s[4])
-96; ey:
=ord
(s[5])
-48; min:
=$7fffffff
;fillchar
(flag,
sizeof
(flag),0
);search
(sx,sy,0)
;if min<
>
2147483647 then
begin
writeln
('board '
,j,': '
,min,
' moves');
endelse
begin
writeln
('board '
,j,': not reachable');
end;
until 0=1
;end.
然後就切掉啦) GDOI模擬 排列
給你m個對1到n的排列的特徵,特徵有兩種 1 x y v 排列的第x個數到第y個數之間的最大值為v 2 x y v 排列的第x個數到第y個數之間的最小值為v 要求你還原出這個排列。刷水有益身心健康。既然是求方案,資料範圍又很小,那麼明顯的要用把點向權值連邊。然後他每次給出範圍之後再進行刪邊。最後,二...
GDOI模擬8 21總結
今天做了cqoi2013的題。第一次5個小時做5道題 先看了半小時的題。t5是初中做過的原題,記得是處理出上下界然後暴力列舉就行了,就先打了t5,花了乙個小時搞定了t5,過了樣例和自己出的幾個資料就沒管了 沒對拍是因為我覺得資料生成器有點難搞 然後這題做法本來就是暴力 然後去看了下之前沒怎麼看懂題的...
GDOI模擬2015 08 18 解密
給定一篇由若干個單詞構成的原文,還有乙個由若干個單詞組成的句子。加密文是由原文單詞通過某個單詞 可能一樣 替換而成的,原文相同單詞一定會被相同加密文單詞替換。沒有兩個不同的原文單詞被同乙個加密文單詞替換。要求找出句子在加密文中第一次出現的位置。原文本元總和不超過 1000000 句子字元總和不超過 ...