題目描述
noip有n個島嶼,編號為1..n,noip決定在島嶼之間發展船運網路。
你在船運票務中心工作,很多人想花盡量少的錢從乙個島到另乙個島進行坐船旅行,他們每個人都報上自己的出發地和目的地,你的任務是告訴他最小花費。但是在這個過程中船的航線不會一直不變,可能會在某個時候增加一些航線,這些新增加的航線顯然對之前的詢問沒有作用,但對之後的詢問就要考慮到這些航線了。
按照時間先後的順序給你乙個清單,裡面包含詢問以及增加航線的資訊,寫乙個程式回答遊客提出的問題。
題解:每加入一條x到y,列舉每乙個到x和y的點i和j,比較f[i,x]+f[x,y]+f[y,j]和f[i,j]那個小。
一開始我用弗洛伊德,超時*n
**:
var
n,m:longint;
f:array[1..101,1..101] of int64;
procedure
init;
var i,j:longint;
begin
readln(n,m);
for i:=1
to n do
for j:=1
to n do
if i<>j then
f[i,j]:=maxlongint;
end;
procedure
main;
var i,j,k,x,y,s:longint;
begin
for i:=1
to m do
begin
read(k);
if k=0
then
begin
read(x,y);
if f[x,y]>=maxlongint then
writeln(-1)
else
if f[x,y]>f[y,x] then
writeln(f[y,x])
else
writeln(f[x,y]);
endelse
begin
read(x,y,s);
if f[x,y]>s then
begin
f[x,y]:=s;
f[y,x]:=s;
end;
for j:=1
to n do
for k:=1
to n do
if f[j,x]+f[x,y]+f[y,k]then
begin
f[j,k]:=f[j,x]+f[x,y]+f[y,k];
f[k,j]:=f[j,k];
end;
end;
end;
end;
begin
init;
main;
end.
2012 03 3普及組 尋找星座
題目描述 現在你在一張衛星中尋找星座,已知該星座在中正好出現一次,而且形狀一樣,方向一樣,大小也一樣。注意中可能有一些與該星座無關的星星。例如圖1中的星座出現在圖2的衛星中 用圓圈標識部分 圖1中給定的星座需要在x軸上平移2個單位同時在y軸上平移 3個單位才能與衛星中的衛星正好吻合。寫乙個程式,計算...
2012 03 3普及組 烤餅乾
noip烤餅乾時兩面都要烤,而且一次可以烤r 1 r 10 行c 1 c 10000 列個餅乾,當一面烤到規定時間時,機器會把整個翻過來以接著烤另一面。有一天,正當機器準備翻餅乾時發生了 有一些餅乾被翻了過來,有一些沒有。幸運的是,過後你可以手工操作,一次可以同時翻若干行或者若干列,但不能單獨翻某乙...
1399 坐船旅行
題目描述 noip有n個島嶼,編號為1 n,noip決定在島嶼之間發展船運網路。你在船運票務中心工作,很多人想花盡量少的錢從乙個島到另乙個島進行坐船旅行,他們每個人都報上自己的出發地和目的地,你的任務是告訴他最小花費。但是在這個過程中船的航線不會一直不變,可能會在某個時候增加一些航線,這些新增加的航...