牛客 雪拉比的求救(最短路 思維)

2021-10-07 13:30:39 字數 2434 閱讀 8541

愛與正義的火箭隊為了得到雪拉比,於是對它展開了捕捉計畫。當雪拉比受到傷害時,它會使用全部能力穿越到1小時之後的時間,並發出了sos的求救。

小梁在旅行的途中感受到了雪拉比的求救,她跟著雪拉比的求救,來到了一座遺跡,該遺跡的俯檢視可看為n\textn個傳送點,m\textm條道路所組成的雙向連通圖,每一條道路都有對應的長度di\text_idi​。

通過心靈指引小梁終於救出了雪拉比。但是由於被火箭隊追趕,雪拉比只能隱藏自己的氣息。

火箭隊也發現了雪拉比和小梁的位置,同時小梁也在雪拉比的幫助下確定了火箭隊的位置。小梁想知道在她和火箭隊移動速度相同的條件下,為了順利的躲避火箭隊,並且雙方都以最短路徑向對方原始位置移動,有多少方案可以使得他們不相遇,並對方案數取模109+710^9+7109+7。

第一行輸入兩個整數n和m(1≤n≤100000,1≤m≤200000)

第二行輸入兩個整數s和t(1≤s,t≤n,s≠t)分別表示小梁和火箭隊所在的位置

下面m行輸入三個整數 ui,vi,di表示第ui個點和第vi個點相連,他們的距離是di(1≤ui,vi≤n,1≤di≤10^9)

輸出所有符合條件的方案對10^9+7取模後的數。
示例1

8 9

4 21 2 2

7 6 9

2 8 12

4 2 18

8 4 2

3 5 18

1 5 3

4 7 7

2 7 7

2
4和2之間的最短路為14,其中不會相遇的方案路線分別為:

①t到s:2-8-4;s到t:4-7-2

②t到s:2-7-4;s到t:4-8-2

思路:用dijkstra演算法求解出,每個點到s的距離 da[0][i] 和到t的距離 da[1][i] ,以及相應的最短路線數 su[0][i] 和 su[1][i] 。

分析可知需要知道s到t的最短路徑,以及路徑數cnt=da[0][t]。

如果不考慮相遇則方案數為 sum=cnt*cnt 。

相遇的話則有兩種情況:

1.在某一點相遇。方案數為 g=su[0][i]*su[1][i]*su[0][i]*su[1][i] 。

2.在路徑上相遇。方案數為 h=su[0][u]*su[1][v]*su[0][u]*su[1][v] 。

最終結果為 sum-g-h 。

ac示例**

#include //超時 

#include #include #include #include #include #include #include #include #include #include #define cla(a, sum) memset(a, sum, sizeof(a))

#define rap(i, m, n) for(int i=m; i<=n; i++)

#define rep(i, m, n) for(int i=m; i>=n; i--)

#define bug printf("???\n")

using namespace std;

typedef long long ll;

typedef unsigned long long ull;

typedef pairp;

const ll inf = 1e17;

const double eps = 1e-8;

const int maxn = 1e5+5;

const ll mod=1e9+7;

template void read(t &x)

while (isdigit(ch))

x *= f;

}int n,m;

int s,t;

int a[maxn],cnt;

struct nodef[4*maxn];

int vis[2][maxn]=;

ll da[2][maxn],su[2][maxn];

ll sum;

void init()

cnt=0;

}void add(int u,int v,ll d)

void dijk(int x,ll d,int ok,ll sa)

else if(d[c]==d[u]+f[i].d )

} } }

int main()

dijk(s,da[0],vis[0],su[0]);

dijk(t,da[1],vis[1],su[1]);

sum=su[0][t]*su[1][s]%mod;

// cout

rap(i,1,n)

for(int k=a[i];k!=-1;k=f[k].next )

} }cout

}

牛客網 bfs 逃脫 切比雪夫距離

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 題目描述 這是mengxiang000和tabris來到幼兒園的第四天,幼兒園老師在值班的時候突然發現幼兒園某處發生火災,而且火勢蔓延極快,老師在第一時間就發出了警報,...

高斯型求積公式 勒讓德 拉蓋爾 切比雪夫

gauss型求積公式 若機械求積公式具有階代數精度,則稱為gauss型求積公式,而在上關於權函式的次正交多項式的零點就是gauss型求積公式的gauss點。在gauss型求積公式中,若權函式,區間為,則公式為 特別的稱為gauss legendre公式。下表列出gauss legendre公式的結點...

小A與尤拉路(牛客 樹的直徑)

題解 尤拉路 從圖中任意乙個點開始到圖中任意乙個點結束的路徑,並且圖中每條邊只通過恰好一次 問你走完這樹上所有的點最短路徑是什麼。因為樹是沒有環的,所以你走到葉子結點的時候需要往回走,也就是再走一遍剛剛走過的路。所以我們確定一條主道路,遇到分支就走一遍 主道路是不需要走兩遍的 因為所有長度都是已知的...