給你乙個n點m邊的有向圖,求第乙個點到第n個點的最短路和最短路條數
很明顯直接dijkstra求最短路,加乙個最短路計數
如下:
if(dis[y]>dis[x]+edge[i].w)
else if(dis[y]==dis[x]+edge[i].w) ans[y]+=ans[x];
記住要刪除重邊,要不然計數會重複
上**
#include#define re register
#define ll long long
using namespace std;
inline int read()
const int n=2e3+10,e=4e6+10;
int n,e;
struct edge;
edge edge[e<<1];
const int mod=100003;
int head[n],cnt;
int dep[n];
int dis[n],ans[n];
bool vis[n];
int awsl[n][n];
struct new
};priority_queueq;
inline void add(int x,int y,int w)
inline void dijkstra());
while(!q.empty()));
}else if(dis[y]==dis[x]+edge[i].w) ans[y]+=ans[x];
} }}int main()
} dijkstra();
if(ans[n]==0) cout<<"no answer";
else cout
}
洛谷 P1608 路徑統計
rp餐廳 的員工素質就是不一般,在齊刷刷的算出同乙個 號碼之後,就準備讓hzh,tzy去送快餐了,他們將自己居住的城市畫了一張地圖,已知在他們的地圖上,有n個地方,而且他們目前處在標註為 1 的小鎮上,而送餐的地點在標註為 n 的小鎮。有點廢話 除此之外還知道這些道路都是單向的,從小鎮i到j需要花費...
洛谷 P1608 路徑統計
洛谷傳送門 rp 餐廳 的員工素質就是不一般,在齊刷刷的算出同乙個 號碼之後,就準備讓 hzh,tzy 去送快餐了,他們將自己居住的城市畫了一張地圖,已知在他們的地圖上,有 nn 個地方,而且他們目前處在標註為 1 的小鎮上,而送餐的地點在標註為 n 的小鎮。有點廢話 除此之外還知道這些道路都是單向...
洛谷 P1608 路徑統計
rp餐廳 的員工素質就是不一般,在齊刷刷的算出同乙個 號碼之後,就準備讓hzh,tzy去送快餐了,他們將自己居住的城市畫了一張地圖,已知在他們的地圖上,有n個地方,而且他們目前處在標註為 1 的小鎮上,而送餐的地點在標註為 n 的小鎮。有點廢話 除此之外還知道這些道路都是單向的,從小鎮i到j需要花費...