【luogu1144】最短路计数(SPFA)
来源:互联网 发布:乐昌网络问政平台 编辑:程序博客网 时间:2024/06/08 16:27
题目:
我是超链接
题解:
用spfa求出最短距离之后,用递归+记忆化求出ans
代码:
#include <cstdio>#include <cstring>#include <algorithm>#include <queue>#include <iostream>#define Mod 100003#define M 2000000+5#define N 1000000+5using namespace std;int nxt[M],point[M],v[M],tot,ans[N],dis[N];bool c[N];void addline(int x,int y){++tot; nxt[tot]=point[x]; point[x]=tot; v[tot]=y;++tot; nxt[tot]=point[y]; point[y]=tot; v[tot]=x;}int dfs(int t){int i;if (ans[t]) return ans[t];for (i=point[t];i;i=nxt[i]) if (dis[t]==dis[v[i]]+1)ans[t]=(ans[t]+dfs(v[i]))%Mod;return ans[t];}int main(){int n,m,i,x,y;scanf("%d%d",&n,&m);for (i=1;i<=m;i++){scanf("%d%d",&x,&y);addline(x,y);}queue<int>q;q.push(1);memset(c,0,sizeof(c));memset(dis,0x7f,sizeof(dis));dis[1]=0;for (i=1;i<=n;i++) while (!q.empty()){int now=q.front(); q.pop();for (i=point[now];i;i=nxt[i]) if (dis[v[i]]>dis[now]+1) {dis[v[i]]=dis[now]+1;if (!c[v[i]]){c[v[i]]=true;q.push(v[i]);} }}ans[1]=1;for (i=1;i<=n;i++) printf("%d\n",dfs(i));}
阅读全文
1 0
- 【luogu1144】最短路计数(SPFA)
- 最短路计数(spfa)
- 洛谷P1144 最短路计数(spfa)
- 【SPFA】洛谷1144 最短路计数
- spfa+dp(洛谷1144 最短路计数)
- 迈出一大步[spfa]最短路计数
- 最短路(SPFA)
- 最短路 (Spfa)
- 最短路算法(SPFA)
- poj3256(SPFA最短路)
- 最短路(SPFA)算法
- 最短路 - spfa - (一)
- SPFA算法 (最短路)
- HDUOJ_2544(最短路)(SPFA)
- hdu1874(最短路spfa)
- hdu4707Pet最短路(spfa)
- 最短路(SPFA算法)
- 最短路(dijkstra、spfa)
- [RK3288][Android6.0] 调试笔记 --- 录音音量从HAL到APP层会变小问题
- C语言中的指针(一)
- BZOJ4591: [Shoi2015]超能粒子炮·改
- 网站被黑检测-网页挂马及暗链检测
- XAMPP下的MYSQL解决中文乱码问题
- 【luogu1144】最短路计数(SPFA)
- 安卓app开发之Basic4android软件安装配置以及常见错误
- Windows映射局域网共享地址至本地(Net Use)
- React Redux
- 大话数据结构(六)——队列的两种java实现方式
- 棋盘游戏 【二分匹配+枚举】
- POJ 3660 Cow Contest (全源最短路)
- 多线程之生产者与消费者问题
- 论文格式