2012 03 3普及組 坐船旅行

2021-07-14 20:10:19 字數 1427 閱讀 5200

題目描述

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決定在島嶼之間發展船運網路。你在船運票務中心工作,很多人想花盡量少的錢從乙個島到另乙個島進行坐船旅行,他們每個人都報上自己的出發地和目的地,你的任務是告訴他最小花費。但是在這個過程中船的航線不會一直不變,可能會在某個時候增加一些航線,這些新增加的航...