洛谷P2384 最短乘積路徑

2022-05-20 14:26:57 字數 869 閱讀 8595

題目大意:給定 n 個點,m 條邊的有向圖,邊有邊權,求從 1 號頂點到 n 號頂點的最短乘積路徑。(經過的路徑乘積最小)結果對9987取模。

乘積會爆 long long ,同時由於 dij 演算法的性質,又不能在 bfs 的過程中對答案取模。

同時,根據對數的性質有 \(log(x)+log(y)=log(xy)\),因此,可以採用將邊權取對數存入鄰接表中,dij 比較的時候用這個取對數之後的邊權比較,並記錄路徑,最後按照路徑還原統一處理答案。

**如下

#include using namespace std;

const int maxv=1010;

const int maxe=1e6+10;

typedef pairp;

inline int read()while(!isdigit(ch));

dowhile(isdigit(ch));

return f*x;

}struct nodee[maxe];

int tot=1,head[maxv];

int n,m,vis[maxv],pre[maxv][2];

double dis[maxv];

priority_queueq;

inline void add_edge(int from,int to,int w,double lw),head[from]=tot;

}void read_and_parse()

}void solve()

} }int ans=1;

for(int t=n;t!=1;t=pre[t][0])

printf("%d\n",ans);

}int main()

洛谷 P2384 最短路

p2384 最短路 題目提供者bosh 標籤圖論 最短路難度普及 提高 狗哥做爛了最短路,突然機智的考了bosh一道,沒想到把bosh考住了 你能幫bosh解決嗎?他會給你100000000000000000000000000000000000 10金幣w 題目描述 給定n個點的帶權有向圖,求從1到...

P2384 最短路 洛谷

狗哥做爛了最短路,突然機智的考了bosh一道,沒想到把bosh考住了.你能幫bosh解決嗎?他會給你100000000000000000000000000000000000 10金幣w 給定n個點的帶權有向圖,求從1到n的路徑中邊權之積最小的簡單路徑。輸入格式 第一行讀入兩個整數n,m,表示共n個點...

洛谷P2384 最短路

題目大意 給你乙個圖,要你求出其中1 n路徑中乘積最小的一條路 題解 用 log 2 把乘法變成加法,然後記錄每個點的前驅,最後求出答案 c code include includeusing namespace std const int mod 9987 int n,m int head 101...