時間限制: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 12 11 2
1 35 5 3 5
3 1 4
1 22 3
2 43 4
4 5
複製
13
1≤n≤100000,1≤m≤2∗n,
1≤k≤100000,
1≤s≤n,
1≤u,v≤n,
無重邊,無自環,保證聯通,
資料不多於10組
分析::
求出青蛙起點到任一點的最短時間,再與青蛙在該地的時刻進行比較,更新最小值
1 #include2using
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 個,因為每個...