Luogu 1144(SPFA+dp)
来源:互联网 发布:澄海 全知药水 编辑:程序博客网 时间:2024/05/18 20:11
传送门
题解:先跑一遍SPFA,然后再dp,如果dis[v]+1==dis[p],则有ans[p]=(ans[p]+ans[v])%MOD
注意:ans[1]初始化为1(1的最短路就是0,有一条),否则ans跑出来全是0……
#include<bits/stdc++.h>using namespace std;const int MAXN=1e6+2,MAXM=2e6+2,MOD=1e5+3;int n,m,head[MAXN],edge=0;struct EDGE { int v,nxt;}e[MAXM<<1];bool vis[MAXN];int dis[MAXN],ans[MAXN];inline int read() { int x=0;char c=getchar(); while (c<'0'||c>'9') c=getchar(); while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar(); return x;}inline void adde(int u,int v) { e[edge].nxt=head[u],e[edge].v=v,head[u]=edge++; e[edge].nxt=head[v],e[edge].v=u,head[v]=edge++;}inline void SPFA() { queue<int> q; memset(vis,false,sizeof(vis)); memset(dis,0x3f,sizeof(dis)),dis[1]=0; q.push(1),vis[1]=true; while (!q.empty()) { int p=q.front(); q.pop(),vis[p]=false; for (int i=head[p];~i;i=e[i].nxt) { int v=e[i].v; if (dis[v]>dis[p]+1) { dis[v]=dis[p]+1; if (!vis[v]) { vis[v]=true; q.push(v); } } } }}int cal(int p) { for (int i=head[p];~i;i=e[i].nxt) { int v=e[i].v; if (dis[v]+1==dis[p]) { if (!ans[v]) ans[v]=cal(v); ans[p]=(ans[p]+ans[v])%MOD; } } return ans[p];}int main() {// freopen("P1144.in","r",stdin); memset(head,-1,sizeof(head)); n=read(),m=read(); for (register int i=0;i<m;++i) { int u=read(),v=read(); adde(u,v); } SPFA(); memset(ans,0,sizeof(ans)),ans[1]=1; for (register int i=1;i<=n;++i) { if (!ans[i]) ans[i]=cal(i); printf("%d\n",ans[i]); } return 0;}
阅读全文
0 0
- Luogu 1144(SPFA+dp)
- Luogu 3387(tarjan+dp)(tarjan+SPFA)
- Luogu 1186(SPFA)
- Luogu 1979(BFS+SPFA)
- Luogu 1280(dp)
- Luogu 1282(dp)
- Luogu 1387(dp)
- Luogu 1156(dp)
- Luogu 1141(dp)
- Luogu 1880(区间dp)
- Luogu 1351(树形dp)
- Luogu 1040(区间dp)
- Luogu 1074(tarjan+dp)
- Luogu 2679(dp)(NOIP 2015)
- Luogu-P1025数的划分(dp)
- Luogu-P1057传球游戏(dp)
- 【NOIP2017】【Luogu P3956】【SPFA】棋盘
- Luogu 1273(树形dp)(背包dp)
- 文章标题
- x264编解码个人简识
- Spring(二):了解IOC
- qduoj ycb的ACM进阶之路(多重背包)
- Java中堆内存和栈内存详解
- Luogu 1144(SPFA+dp)
- A
- 京东云主机搭建FTP服务器,我用的Xlight-FTP服务器
- 【hpu oj 1014: 985的数学难题 [思维] 】
- MAC下Mongodb的安装
- xUtils3 的基本使用
- 不改变正负数相对顺序的重新排列
- TCP/IP编程之listen函数backlog参数详解(linux)
- win32开发流程