luogu1608 路径统计 (spfa)
题意:给一个有向图(无零边),要求找出最短路的数量(重边只计算一次)
做spfa的时候,记一个cnt
对于u-w->v如果dis[u]+w=dis[v],cnt[v]+=cnt[u]
如果dis[u]+w<dis[v],cnt[v]=cnt[u]
要注意的是,不论是大于还是等于,都需要把v加到队列里继续去更新
(如果等于时不加,那么有可能v这个点在增加u->v之前更新过后面的点,这个后面的点就不会加从u来的路径)
那既然等于时也要加入队列,那么有可能一个点就会给后面的更新两次,那么在更新过一次后直接把cnt[u]给成0即可
然而不能让N这个点被给成0,其实N这个点根本就没必要被加入队列,发现有N的时候跳过即可
最后答案就是cnt[N]
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn=; int rd(){
int x=;char c=getchar();
while(c<''||c>'') c=getchar();
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x;
} struct Edge{
int a,b,l,ne;
}eg[maxn*maxn];
int N,M,egh[maxn],ect;
int eg2[maxn][maxn];
int ans[maxn];
int dis[maxn];bool flag[maxn];
queue<int> q; void adeg(int a,int b,int l){
eg[ect].a=a;eg[ect].b=b;eg[ect].l=l;eg[ect].ne=egh[a];
eg2[a][b]=l;egh[a]=ect++;
} void spfa(){
memset(dis,,sizeof(dis));
dis[]=;ans[]=;q.push();
while(!q.empty()){
int p=q.front();q.pop();flag[p]=;
if(p==N) continue;
for(int i=egh[p];i!=-;i=eg[i].ne){
int j=eg[i].b;
if(dis[j]==dis[p]+eg[i].l){
ans[j]+=ans[p];
if(!flag[j]) q.push(j);flag[j]=;
}
if(dis[j]>dis[p]+eg[i].l){
dis[j]=dis[p]+eg[i].l;
ans[j]=ans[p];
if(!flag[j]) q.push(j);flag[j]=;
}
}ans[p]=;
}
} int main(){
int i,j,k;
N=rd();M=rd();
memset(egh,-,sizeof(egh));memset(eg2,,sizeof(eg2));
for(i=;i<=M;i++){
int a=rd(),b=rd(),c=rd();
if(eg2[a][b]>c) adeg(a,b,c);
}
spfa();
if(dis[N]>*N) printf("No answer\n");
else printf("%d %d\n",dis[N],ans[N]);
}
luogu1608 路径统计 (spfa)的更多相关文章
- 洛谷——P1608 路径统计
P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方, ...
- 洛谷 P1608 路径统计
P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方, ...
- 键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key, 用个数作为value,放入到map集合中,遍历map集合
package cn.it.zuoye5; import java.io.File;import java.util.HashMap;import java.util.Iterator;import ...
- 某模拟赛C题 树上路径统计 (点分治)
题意 给定一棵有n个节点的无根树,树上的每个点有一个非负整数点权.定义一条路径的价值为路径上的点权和-路径上的点权最大值. 给定参数P,我!=们想知道,有多少不同的树上简单路径,满足它的价值恰好是P的 ...
- luogu P1608 路径统计
题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方,而且他们目前处在标注为 ...
- luogu 1608 路径统计--最短路计数
https://www.luogu.org/problemnew/show/P1608 题意https://www.cnblogs.com/rmy020718/p/9440588.html相似,建议还 ...
- 洛谷P1608路径统计
题目 这个提示一个简单的最短路计数,除了用数组存上最短路的个数的做法以外,还有可以在得出最短路之后,搜索加剪枝的方法来通过该题. 可以反向搜索用A*的方法来通过,但是这个题的去重十分的恶心,需要一些玄 ...
- 【luogu P1608 路径统计】 题解
题目链接:https://www.luogu.org/problemnew/show/P1608 补上一发最短路计数! 感谢王强qwqqqq @Lance1ot #include <queue& ...
- P1608 路径统计
题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方,而且他们目前处在标注为 ...
随机推荐
- 【学习总结】GirlsInAI ML-diary day-6-String字符串
[学习总结]GirlsInAI ML-diary 总 原博github链接-day6 认识字符串 字符串的性质 字符串的玩法 1-字符串就是字符的序列 序列,代表字符串是有顺序的!这里很重要. 比如我 ...
- Git Gerrit Code Review
Gerrit Code Review | Gerrit Code Reviewhttps://www.gerritcodereview.com/
- Migrate MySQL database using dump and restore
kaorimatz/mysqldump-loader: Load a MySQL dump file using LOAD DATA INFILEhttps://github.com/kaorimat ...
- Jenkins deploy war to tomcat over https
ssl - HTTPS login with Spring Security redirects to HTTP - Stack Overflow https://stackoverflow.com/ ...
- Redis教程(Windows)
安装 1)下载redis压缩包并 , 推荐地址:https://github.com/MSOpenTech/redis/releases Redis 支持 32 位和 64 位.这个需要根据你系统平 ...
- Windows10常用快捷键
1. 打开注册表 ctrl+R ---> regedit 2.打开资源管理器 win + E 3.切换到桌面 win + D 再按一次可以进行还原 4.锁屏 win+ ...
- 什么是arp协议?
转自:https://blog.csdn.net/tigerjibo/article/details/7351992 ARP (Address Resolution Protocol) 是个地址解析协 ...
- Java 获取当前日期的四种方法
//1 通过Date类来获取当前时间,通过SimpleDateFormat来设置时间格式 SimpleDateFormat dateFormat = new SimpleDateFormat(&quo ...
- Angular MVC
<!DOCTYPE html><html ng-app="myApp"><head lang="en"> <meta ...
- UTF-8编码与GBK编码下的字符长度
源码: package lsh.java.charset; import java.nio.charset.Charset; public class LengthOfUTF_8 { public s ...