BFS 小媽媽找蝌蚪

2021-10-02 10:39:41 字數 1549 閱讀 2780

青蛙媽媽最近很不放心把蝌蚪寶寶送到幼兒園,但當她買菜回家時,卻發現可愛的孩子小蝌蚪走丟了。

小池塘裡有很多石頭,青蛙家在其中標號為s的石頭上。小蝌蚪會移動k分鐘,每分鐘會出現在任意石頭旁邊,甚至多次出現在一塊石頭旁邊。但k分鐘之後,蝌蚪寶寶就游不動了。

青蛙媽媽第0秒從家所在的石頭出發,每分鐘移動一次,可以留在原地,也可以跳躍到一塊當前可跳躍到的石頭上(只能在特定的石頭間雙向跳躍)。

多組資料。

第一行輸入石頭個數n,青蛙媽媽可以跳躍的石頭對數m,蝌蚪寶寶的活動時間k,青蛙家所在的石頭s。

之後輸入k個數,其中第i個數代表第i分鐘蝌蚪寶寶的位置,編號從i=1開始。

接下來輸入m行,每行包括兩個數ui,vi,表示青蛙媽媽可以在第ui個和vi個石頭間雙向跳躍。

請輸出青蛙媽媽最少幾分鐘發現蝌蚪寶寶。

3 2 2 1

2 11 2

1 35 5 3 5

3 1 4

1 22 3

2 43 4

4 51

31≤n≤100000,

1≤m≤2∗n,

1≤k≤100000,

1≤s≤n,

1≤u,v≤n,

無重邊,無自環,保證聯通,

資料不多於10組

這題可以分成兩種情況,第一種在k分鐘之內,媽媽就找到小蝌蚪了,對於這種情況,就要找媽媽到達每塊石頭的最短時間,並從前往後遍歷,如果到達某塊石頭的最短時間小於或等於小蝌蚪到達這塊石頭的時間,那麼小蝌蚪到達這塊石頭的時間,就是媽媽可以找到小蝌蚪的最少時間。第二種情況是在k分鐘以後,媽媽才找到小蝌蚪,這種情況下,說明在k分鐘之內,媽媽到達每塊石頭的最短時間都大於小蝌蚪到達這塊石頭的時間,並不能找到,而k分鐘後,小蝌蚪已經游不動了,只能待在乙個地方,此時只要輸出媽媽到達小蝌蚪此時所在石頭的最少時間即可。

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn=

1e5+5;

const

int inf=

0x3f3f3f3f

;int n,m,k,s;

int vis[maxn]

,dis[maxn]

;vector<

int> f[maxn]

;void

bfs(

int src)}}

}int

main()

for(

int i=

0;i)for

(int i=

1;i<=n;i++

) vis[s]=0

;bfs

(s);

for(

int i=

1;i<=k;i++)}

if(!flag)

for(

int i=

0;ireturn0;

}

小蝌蚪找媽媽 牛客

時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld 青蛙媽媽最近很不放心把蝌蚪寶寶送到幼兒園,但當她買菜回家時,卻發現可愛的孩子小蝌蚪走丟了。小池塘裡有很多石頭,青蛙家在其中標號為s的石頭上。小蝌蚪會移動k分鐘,每分...

唐伯虎找秋香 bfs

題目描述 唐伯虎上次點秋香成功,嘚瑟的很,於是秋香為了讓唐伯虎懂得珍惜,決定把自己藏起來。如果天黑之前唐伯虎找不到她,那唐今晚就要睡沙發了!已知秋香把自己藏在乙個nm的迷宮裡,唐伯虎的位置在 1,1 秋香的位置在 n,m 現在離天黑還有t分鐘,唐伯虎每次移動1單位距離需要1分鐘。走過的地方有機關不能...

找圈圈 BFS簡單運用

題目位置 題目大意是給乙個無向連通圖,找其中有幾個標準的圈。所謂標準的圈,就是乙個圈外不能有其他線段和環。那麼其中每個點都只有兩條邊 我的方法是用bfs將連通的一組點放入乙個佇列中,如果這些點都只有兩條邊,那麼這些點形成乙個圈 如果其中有乙個點的邊數!2,那麼這些點沒有形成圈。include inc...