小蝌蚪找媽媽 牛客

2022-08-02 06:18:13 字數 1499 閱讀 8809

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 131072k,其他語言262144k

64bit io format: %lld

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

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

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

多組資料。

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

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

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

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

複製

3 2 2 1

2 11 2

1 35 5 3 5

3 1 4

1 22 3

2 43 4

4 5

複製

1

3

1≤n≤100000,

1≤m≤2∗n,

1≤k≤100000,

1≤s≤n,

1≤u,v≤n,

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

資料不多於10組

分析::

求出青蛙起點到任一點的最短時間,再與青蛙在該地的時刻進行比較,更新最小值

1 #include2

using

namespace

std;

3#define ll long long

4const

int maxn=1e5+5;5

intmb[maxn];

6int

dis[maxn];

7int

n,m,k,s;

8 vectorv[maxn];

9 queueque;

10int

main()

1118

for(int i=0;i<=n;i++)

22for(int i=1;i<=m;i++)

28que.push(s);

29while(!que.empty())

3039}40

}41int min=1e9+77;42

for(int i=1;i<=k;i++)

4346}47

}48if(min==1e9+77)min=dis[mb[k]];//

當k時刻內都未找到,那麼直接輸出到達最後點的時間

49 printf("

%d\n

",min);50}

51return0;

52 }

BFS 小媽媽找蝌蚪

青蛙媽媽最近很不放心把蝌蚪寶寶送到幼兒園,但當她買菜回家時,卻發現可愛的孩子小蝌蚪走丟了。小池塘裡有很多石頭,青蛙家在其中標號為s的石頭上。小蝌蚪會移動k分鐘,每分鐘會出現在任意石頭旁邊,甚至多次出現在一塊石頭旁邊。但k分鐘之後,蝌蚪寶寶就游不動了。青蛙媽媽第0秒從家所在的石頭出發,每分鐘移動一次,...

牛客網 找x

輸入乙個數n,然後輸入n個數值各不相同,再輸入乙個值x,輸出這個值在這個陣列中的下標 從0開始,若不在陣列中則輸出 1 測試資料有多組,輸入n 1 n 200 接著輸入n個數,然後輸入x。對於每組輸入,請輸出結果。示例12 1 30 1 include include include include...

牛客 交換 思維 找迴圈節

題目大意 給出乙個數列 n 要求通過交換使其從小到大排序的最小次數 題目分析 第一反應是求逆序對,把之前做過的題目貼過來結果只過了 10 靜下心來又讀了一下題,發現這個題目要求交換的兩個數字並不要求相鄰,這就變成了乙個思維題了,可以從迴圈節的角度出發,首先達到最終目標的迴圈節一定有 n 個,因為每個...