博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 1144 最短路计数 bfs
阅读量:4629 次
发布时间:2019-06-09

本文共 1708 字,大约阅读时间需要 5 分钟。

  

  其实这道题目的正解应该是spfa里面加一些处理,,然而,,然而,,既然它是无权图,,那么就直接bfs了,用一个cnt记录一下每一个点的方案数,分几种情况讨论一下转移,最后输出cnt即为结果。。

  题目中所说的重边和自环啥的没看出来有啥影响。。

1 #include 
2 #include
3 #include
4 5 const int maxn = 100000 + 500; 6 const int mod = 100003; 7 int que[maxn]; 8 bool vis[maxn]; 9 int last[maxn], pre[5 * maxn], other[5 * maxn];10 int dis[maxn], cnt[maxn];11 int n, m;12 int x, y;13 int tot = 0;14 void bfs(int s) {15 memset(dis, 127, sizeof(dis));16 dis[s] = 1;17 cnt[s] = 1;18 int h = 0, t = 1;19 que[1] = s;20 while (h < t) {21 h = (h + 1) % maxn;22 int cur = que[h];23 for (int p = last[cur]; p; p = pre[p]) {24 int q = other[p];25 if (dis[q] == 0) {26 dis[q] = dis[cur] + 1;27 cnt[q] = cnt[cur];28 t = (t + 1) % maxn;29 que[t] = q;30 } else if (dis[q] > dis[cur] + 1) {31 dis[q] = dis[cur] + 1;32 cnt[q] = cnt[cur];33 t = (t + 1) % maxn;34 que[t] = q;35 } else if (dis[q] == dis[cur] + 1) {36 cnt[q] = (cnt[q] + cnt[cur]) % mod;37 }38 }39 }40 }41 void add(int x, int y) {42 tot++;43 pre[tot] = last[x];44 last[x] = tot;45 other[tot] = y;46 }47 int main () {48 scanf("%d %d", &n, &m);49 for (int i = 1; i <= m; i++) {50 scanf("%d %d", &x, &y);51 add(x, y);52 add(y, x);53 }54 bfs(1);55 for (int i = 1; i <= n; i++) {56 printf("%d\n", cnt[i]);57 }58 59 return 0;60 }

 

转载于:https://www.cnblogs.com/CtsNevermore/p/6040276.html

你可能感兴趣的文章
java Web三大组件--过滤器
查看>>
使用NUnit为游戏项目编写高质量单元测试的思考
查看>>
Uva 1638 Pole Arrangement
查看>>
Java内存泄漏
查看>>
逻辑函数的代数化简法
查看>>
第十一周PSP&进度条
查看>>
hdu 1501 DFS+记忆化搜索
查看>>
试说移动端是如何调试的?
查看>>
常用正则表达式!
查看>>
用JAVA生成老电影海报
查看>>
数组溢界地址的正确使用: 即 int a[6] 中的 a[-1] 和 a[6] 正确使用
查看>>
怎样退出App之前唤醒还有一个App?
查看>>
-bash:jps:command not found
查看>>
cogs 998. [東方S2] 帕秋莉·诺蕾姬
查看>>
BZOJ 1019: [SHOI2008]汉诺塔
查看>>
jquery ocupload一键上传文件应用
查看>>
Java并发编程-看懂AQS的前世今生
查看>>
洛谷 [P3480] KAM-Pebbles
查看>>
操作系统任务调度问题
查看>>
day02-python 基础02
查看>>