spfa+dp(洛谷1144 最短路计数)
来源:互联网 发布:虚拟屏幕软件 编辑:程序博客网 时间:2024/06/05 05:17
给出一个N个顶点M条边的无向无权图,顶点编号为1~N。问从顶点1开始,到其他每个点的最短路有几条。
输入格式:
输入第一行包含2个正整数N,M,为图的顶点数与边数。
接下来M行,每行两个正整数x, y,表示有一条顶点x连向顶点y的边,请注意可能有自环与重边。
输出格式:
输出包括N行,每行一个非负整数,第i行输出从顶点1到顶点i有多少条不同的最短路,由于答案有可能会很大,你只需要输出mod 100003后的结果即可。如果无法到达顶点i则输出0。
输入样例#1:
5 71 21 32 43 42 34 54 5
输出样例#1:
11124
讲一下思路吧,跑一遍spfa,由于每条边的权值为1,所以第一次遍历到的点的权值肯定是最小的。然后运用dp的思想,每次遍历到的点的方案数等于前面的方案数之和,于是数组开大点就能a了。原谅我写dp是看题解大神的~
这次我的代码应该比较清晰~
#include<bits/stdc++.h>#define maxn 3000000#define maxm 3000000#define inf 129302101 using namespace std;struct Edge{ int to,next,w;};int n,m;struct Edge edge[maxm];int head[maxn],book[maxn],dis[maxn];int dp[maxn];int cnt=0;void add(int u,int v,int w){ edge[++cnt].to=v; edge[cnt].next=head[u]; edge[cnt].w=w; head[u]=cnt;}void spfa(){ queue<int> q; memset(book,0,sizeof(book)); q.push(1); for(int i=1;i<=m;i++) dis[i]=inf; dis[1]=1; dp[1]=1; book[1]=1; int ans=0; while(!q.empty()) { int j=q.front();q.pop(); for(int i=head[j];i;i=edge[i].next) { int v=edge[i].to; if(!book[v]) { book[v]=1; dis[v]=min(dis[v],dis[j]+1); dp[v]+=dp[j]%100003; q.push(v); } else if(dis[v]==dis[j]+1) dp[v]+=dp[j]%100003; }}}int main(){cin>>n>>m;int u,v;for(int i=1;i<=m;i++){ cin>>u>>v; add(u,v,1); add(v,u,1); } spfa(); for(int i=1;i<=n;i++) cout<<dp[i]%100003<<endl;return 0;}
阅读全文
0 0
- spfa+dp(洛谷1144 最短路计数)
- 【SPFA】洛谷1144 最短路计数
- 最短路计数(spfa)
- [洛谷 1144]最短路计数---spfa+记忆化搜索
- 洛谷P1144 最短路计数(spfa)
- 【洛谷1144】最短路计数 最短路
- 最短路SPFA+DP+uva10917
- dp加最短路spfa
- 洛谷1144 最短路计数
- 洛谷 1144 最短路计数
- 【luogu1144】最短路计数(SPFA)
- 迈出一大步[spfa]最短路计数
- 最短路计数_洛谷1144_最短路
- 洛谷 1144 最短路计数 bfs
- 洛谷 1144_最短路计数_spfa
- 【洛谷 1144】【模板】最短路计数
- 最短路计数 洛谷 1114 最短路
- LuoguP1144 最短路计数 解题报告【SPFA/BFS】
- isap算法网络最大流
- FILTER&MAP
- 最小费用最大流基础模板(洛谷3381)
- HDU-1061-Rightmost Digit
- 2017 Multi-University Training Contest
- spfa+dp(洛谷1144 最短路计数)
- 并查集的离线搜索([JSOI2008]星球大战)
- hdu 6038
- 堆or优先队列(洛谷1801 黑匣子_NOI导刊2010提高(06))
- Python 模块搜索路径
- 求全排列的数学方法(洛谷1088 火星人noip2004普及组第4题)
- 全排列(洛谷1061 Jam的计数法or NOIP 2006 普及组 第三题)
- 快速幂+分治(洛谷P1045 麦森数 noip2003)
- shell脚本实现Linux日志服务配置Edition 2