次短路 統計路徑數

2021-10-25 17:12:03 字數 1385 閱讀 6290

題目:統計最短路,及次短路的路徑數

對於每次更新:

1.新路徑比最短路徑長度要小,那麼最短路和次短路的長度和次數都要更新。

2.新路徑等於最短路的長度,那麼只需要更新最短路的條數。

3.新路徑比最短路要長但是比次短路要短,那麼需要更新次短路的長度和條數。

4.新路徑等於次短路徑的長度,那麼只需要更新次短路徑的條數。

#include

using

namespace std;

typedef

long

long ll;

const ll inf=

1e9;

const ll mod=

1e9+7;

const

int maxn=

1e6;

const

int n=

3005

;int head[maxn]

,to[maxn]

,nex[maxn]

,kp[n]

,vis[n][3

],x,y,z,t,s,t,n,m,k;

int dis[n][3

],w[maxn]

,dp[n][3

];struct node};

void

add(

int a,

int b,

int c)

void

dij(

int s));

while

(!p.

empty()

)); dis[y][1

]=dis[now]

[f]+w[i]

; dp[y][1

]=dp[now]

[f];

p.push

((node));

}else

if(dis[y][1

]==dis[now]

[f]+w[i]

)else

if(dis[y][2

]>dis[now]

[f]+w[i]))

;}else

if(dis[y][2

]==dis[now]

[f]+w[i])}

}}intmain()

scanf

("%d%d"

,&s,

&t);

dij(s)

;int ans=dp[t][1

];if(dis[t][2

]-1==dis[t][1

])ans+

=dp[t][2

];printf

("%d\n"

,ans);}

}

最短路徑統計

noip2017 考了這個 不過比這個不知道高到 去了 但是畢竟可以用這個混到30分的呀.大致有兩種做法,可以spfa,也可以寫dijkstra 重要的地方都差不多,即用乙個陣列cnt i 表示 dis i 有多少種走法 dijkstra很好想,每次都是走的最短路直接更新即可 spfa因為可能會反覆...

XJOJ 路徑數 最短路 最短路路徑數量

題目大意 euphemia到乙個n n的藥草田裡採藥,她從左上角的格仔田 第一行,第一列 出發,要到達右下角 第n行,第n列 的格仔田,每次她可以走到與當前格仔有邊相鄰的格仔去,但她不會走已經走過的格仔,而且出於對美的要求,她走過的路徑是關於 左下 右上 對角線對稱的。由於地勢不同,在每個格仔田採藥...

POJ 3255 次短路徑

題意 給你無向帶權圖,求次短路徑 題解 加乙個次短路的陣列,用於距記錄源點到此點的次短路長度,注意初始化是源點到自己的次短路是極大值 接著再使用dijkstra演算法,它是每次選用現在連上 記錄了 的點與其他點的最小權值的邊去更新其他所有的點 就是在dij的演算法上進行簡單的修改,需要修改的是每次最...