洛谷P1144 最短路计数
广搜图的题
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
const int maxn = 1e6+5, maxm = 2e6+5;
const int mod = 100003;
vector<int> g[maxn]; //邻接表,储存点i所能到达的点
int dist[maxn]; //储存点1到点i的距离
int cnt[maxn]; //存点1到点i的最短距离的数量
int n, m;
void bfs(){
memset(dist, 0x3f3f3f3f,sizeof(dist));
//使用0x7f会出错,因为距离更新比较时+1变负数
queue<int> q;
dist[1] = 0; cnt[1] = 1;//初始化到本身距离和方案
q.push(1);
while(q.size()){
int u = q.front(); q.pop();
for(int i=0;i<g[u].size();i++)
{
int v=g[u][i];
if(dist[v] > dist[u] + 1){
//当前是新的最短路,cnt重新计数
dist[v] = dist[u] + 1;
cnt[v]=cnt[u];
cnt[v] %= mod;
q.push(v);
}
else if(dist[v] == dist[u] + 1){
//当前是长度和之前一样的最短路,cnt累加
cnt[v] += cnt[u];
cnt[v] %= mod;
}
}
}
}
int main(){
cin >> n >> m;
for(int i=0; i<m; i++){
int a, b;
cin >> a >> b;//无向图 =双向图
g[a].push_back(b);
g[b].push_back(a);
}
bfs();
for(int i=1; i<=n; i++){
cout << cnt[i] << endl;
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2017-07-27 乒乓球
2017-07-27 电梯
2017-07-27 考试(()9*
2017-07-27 华容道 noip2013 70分搜索
2017-07-27 生日蛋糕