NOIP2018複習 智捅馬蜂窩(最短路)

2021-08-30 21:42:06 字數 1732 閱讀 1488

時間限制:1000ms記憶體限制:256000kb

題目描述

背景為了統計小球的方案數,平平已經累壞了。於是,他摘掉了他那800度的眼鏡,躺在樹下休息。

後來,平平發現樹上有乙個特別不一樣的水果,又累又餓的平平打算去把它摘下來。

題目描述

現在,將大樹以乙個n個節點的無向圖的形式給出,每個節點用座標(xi,yi)來表示表示,平平要從第乙個點爬到第n個點,除了從乙個節點爬向另乙個相鄰的節點以外,他還有一種移動方法,就是從乙個節點跳下,到達正下方的某個節點(之間可隔著若干個點和邊),即當xj=xi and yi輸入

兩個整數n,v,n表示節點個數,v表示平平爬樹的速度。

接下來n行,每行包含3個整數x,y,f,x,y是這個點的座標,f是他的父節點(f一定小於這個點的標號,第一行的f為0)。

注意:兩節點間距離按歐幾里德距離計算 dis = sqrt( ( x1 – x2 ) 2+ ( y1 – y2 )2 )

輸出輸出僅包括一行,從1到n所用的最少所需時間t,保留兩位小數。

輸入樣例複製

9 15 0 0

5 5 1

6 5 2

7 6 2

6 9 2

3 6 2

4 5 2

3 2 7

7 2 3

輸出樣例複製

8.13

說明資料規模 對於100%資料,1<=n<=100,1<=v<=10,0<=x,y<=100. 建議使用extended(pas)或double(c and c++)計算,我們對於精度造成的誤差將不予重測。

題解:spfa模板題

const

maxn=100;

maxm=1000;

var  w:array[0..maxn,0..maxn]of extended;

a:array[1..maxn,1..2]of longint;

dis:array[0..maxn]of extended;

f:array[0..maxn]of longint;

state:array[1..1000000]of longint;

n,sum:longint;

v:extended; 

function dist(x,y:longint):extended;

var  xx,yy:longint;

begin

xx:=(a[x,1]-a[y,1])*(a[x,1]-a[y,1]);

yy:=(a[x,2]-a[y,2])*(a[x,2]-a[y,2]);

dist:=sqrt(xx+yy)/v;

end;

function min(a,b:extended):extended;

begin

if adis[now]+w[now,i] then

begin

dis[i]:=dis[now]+w[now,i];

if f[i]=0 then

begin

f[i]:=1;

inc(tail);

state[tail]:=i;

end;

end;

end;

f[now]:=0;

until head>=tail;

end;

begin

init;

spfa(1);

writeln(dis[n]:0:2);

end.

題目 智捅馬蜂窩

背景為了統計小球的方案數,平平已經累壞了。於是,他摘掉了他那800度的眼鏡,躺在樹下休息。後來,平平發現樹上有乙個特別不一樣的水果,又累又餓的平平打算去把它摘下來。題目描述 現在,將大樹以乙個n個節點的無向圖的形式給出,每個節點用座標 xi,yi 來表示表示,平平要從第乙個點爬到第n個點,除了從乙個...

rqnoj86 智捅馬蜂窩

題目描述 背景為了統計小球的方案數,平平已經累壞了。於是,他摘掉了他那800度的眼鏡,躺在樹下休息。後來,平平發現樹上有乙個特別不一樣的水果,又累又餓的平平打算去把它摘下來。題目描述 現在,將大樹以乙個n個節點的無向圖的形式給出,每個節點用座標 xi,yi 來表示表示,平平要從第乙個點爬到第n個點,...

RQNOJ86 智捅馬蜂窩 最短路

乙個座標系上有n nn個點n 1 n 1n 1條邊,有兩種移動方式 經過一條邊從乙個點到達另乙個點,耗時為這條邊長度 v div v v從乙個點垂直跳下到達正下方的另乙個點。耗時為 y j yi 2 g sqrt yj yi 2 g 注意 g gg取10 1010 求從點1 11到點n nn的最小時...