考慮dijstra的過程,最短路計數我們只需要加上乙個ans,如果當前能鬆弛,即dis[v]>dis[u]+e[i].w,我們就講當前v的ans更新為ans[u],但還有一種特殊情況即dis[v]=dis[u]+e[i].w,我們此時需要將方案數累加,即ans[v]+=ans[u]
然後此題需要判斷重邊,就做完了
#include#include#include
#include
#include
#define re register int
#define ll long long
#define inf 0x3f3f3f3f
#define maxn 2000050
using
namespace
std;
struct
tue[maxn
<<1
];int
head[maxn],cnt;
void add(int u,int v,int
w)int chong[2005][2005
];int
dis[maxn];
bool
vis[maxn];
intn,m;
ll ans[maxn];
priority_queue
int,int> >q;
void
dijstra()
else
if(dis[v]==dis[u]+e[i].w)}}}
signed main()
}dijstra();
if(dis[n]==inf)printf("
no answer\n");
else printf("
%d %lld\n
",dis[n],ans[n]);
return0;
}
洛谷最短路計數SPFA
給出乙個n個頂點m條邊的無向無權圖,頂點編號為1 n。問從頂點1開始,到其他每個點的最短路有幾條。輸入格式 輸入第一行包含2個正整數n,m,為圖的頂點數與邊數。接下來m行,每行兩個正整數x,y,表示有一條頂點x連向頂點y的邊,請注意可能有自環與重邊。輸出格式 輸出包括n行,每行乙個非負整數,第i行輸...
洛谷1144 最短路計數
題目描述 給出乙個n個頂點m條邊的無向無權圖,頂點編號為1 n。問從頂點1開始,到其他每個點的最短路有幾條。輸入輸出格式 輸入格式 輸入第一行包含2個正整數n,m,為圖的頂點數與邊數。接下來m行,每行兩個正整數x,y,表示有一條頂點x連向頂點y的邊,請注意可能有自環與重邊。輸出格式 輸出包括n行,每...
洛谷1144 最短路計數
給出乙個n個頂點m條邊的無向無權圖,頂點編號為1 n。問從頂點1開始,到其他每個點的最短路有幾條。大水題 為了備忘 還是記下來吧 不推方程了,in code 1 2 dijkstra 4 include5 include6 include7 include8 using namespace std ...