【SPFA】 最短路计数
最短路计数
【问题描述】
给出一个N个顶点M条边的无向无权图,顶点编号为1~N。问从顶点1开始,到其他每个点的最短路有几条。
【输入格式】
输入第一行包含2个正整数N,M,为图的顶点数与边数。
接下来M行,每行两个正整数x, y,表示有一条顶点x连向顶点y的边,请注意可能有自环与重边。
【输出格式】
输出包括N行,每行一个非负整数,第i行输出从顶点1到顶点i有多少条不同的最短路,由于答案有可能会很大,你只需要输出mod 100003后的结果即可。如果无法到达顶点i则输出0。
【输入样例】
5 7
1 2
1 3
2 4
3 4
2 3
4 5
4 5
【输出样例】
1
1
1
2
4
【数据规模与约定】
1到5的最短路有4条,分别为2条1-2-4-5和2条1-3-4-5(由于4-5的边有2条)。
对于20%的数据,N ≤ 100;
对于60%的数据,N ≤ 1000;
对于100%的数据,N ≤ 100000,M ≤ 200000。
【试题分析】
非常显然,因为上午学了SPFA,准备找一题练练手……
邻接表秒过,主要老是有个BUG
还好吃了顿饭就醒悟了……
SPFA一遍就行了。
【代码】
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int cnt=0;
int Root[400002],Node[400002],Next[400002];
int que[400002],dis[400002];
bool vis[400002];
int ans[400002];
int N,M;
void add(int u,int v,int w){//邻接表存储
cnt++;
Node[cnt]=v;
Next[cnt]=Root[u];
Root[u]=cnt;
}
void SPFA(int s){
memset(vis,false,sizeof(vis));
for (int i=1; i<=N; i++) dis[i]=9999999;
memset(que,0,sizeof(que));
int tail=1;
que[tail]=s;
dis[s]=0;
ans[1]=1;
vis[s]=true;
for(int head=1;head<=tail;head++){
for(int x=Root[que[head]];x!=0;x=Next[x]){
if(dis[que[head]]+1<dis[Node[x]]){
dis[Node[x]]=dis[que[head]]+1;
ans[Node[x]]=ans[que[head]]%100003;
if(vis[Node[x]]==false){
que[++tail]=Node[x];
vis[Node[x]]=true;
}
}
else if(dis[que[head]]+1==dis[Node[x]]) ans[Node[x]]=(ans[Node[x]]+ans[que[head]])%100003;//等于就更新答案
}
vis[Node[head]]=false;
}
}
int main(){
cin>>N>>M;
for(int i=0;i<M;i++){
int u,v,w=1;
scanf("%d%d",&u,&v);
add(u,v,w);//由于我们要存的是双向图,所以注意要储存两次
add(v,u,w);//注意数组开两倍
}
SPFA(1);
for(int i=1;i<=N;i++) cout<<ans[i]<<endl;//输出
}
【SPFA】 最短路计数的更多相关文章
- BZOJ1632: [Usaco2007 Feb]Lilypad Pond  SPFA+最短路计数
		
Description 为了让奶牛们娱乐和锻炼,农夫约翰建造了一个美丽的池塘.这个长方形的池子被分成了M行N列个方格(1≤M,N≤30).一些格子是坚固得令人惊讶的莲花,还有一些格子是岩石,其余的只是 ...
 - 习题:最短路计数(SPFA最短路计数)
		
最短路计数(洛谷1144)题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条.输入输出格式输入格式:输入第一行包含2个正整数N,M,为图的顶点数 ...
 - 洛谷P1144 最短路计数(SPFA)
		
To 洛谷.1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M ...
 - 洛谷P1144最短路计数题解
		
最短路计数 此题还是寻找从1到i点总共有几个最短路且每条边的边长为1,对于这种寻找最短路的个数,我们可以反向搜索,即先用\(SPFA\)预处理出所有点的最短路,然后我们反向记忆化搜索,可以用\(sum ...
 - 洛谷 P1144 最短路计数 解题报告
		
P1144 最短路计数 题目描述 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 第一行包含2个正 ...
 - 洛谷P1144 最短路计数 及其引申思考
		
图论题目练得比较少,发一道spfa的板子题目- 题目:P1144 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: ...
 - 「LuoguP1144」 最短路计数(dijkstra
		
题目描述 给出一个NN个顶点MM条边的无向无权图,顶点编号为1-N1−N.问从顶点11开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 第一行包含22个正整数N,MN,M,为图的顶点数与边 ...
 - 洛谷——P1144 最短路计数
		
P1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶 ...
 - Dijkstra再理解+最短路计数
		
众所周知,Dijkstra算法是跑单源最短路的一种优秀算法,不过他的缺点在于难以处理负权边. 但是由于在今年的NOI赛场上SPFA那啥了(嗯就是那啥了),所以我们还是好好研究一下Dij的原理和它的优化 ...
 
随机推荐
- JS之相等操作符
			
1.相等 == 和不相等 != 先转换操作数再比较相等性 在转换不同的数据类型时,相等和不相等遵循以下规则: 1.1 如果有一个操作数是布尔值,则在比较相等性前先将其转换为数值---false转换为0 ...
 - 关于action script与js相互调用的Security Error问题
			
大家都知道,as和js相互调用可以通过ExternalInterface.call和ExternalInterface.addCallback来进行. 比较好的做法是使用之前通过ExternalInt ...
 - 树莓派连接wifi
			
使用树莓派,通过无线网卡连接wifi,再通过远程桌面或者ssh的连接树莓派比较方便,本文记录树莓派wifi如何设置. 参考链接: http://www.jianshu.com/p/b42e8d3df4 ...
 - [代码片段]读取BMP文件
			
文件名mybmp.c //实现了读取24位BMP文件,还有一些测试信息 //定义mybmp.c里面用到的函数和相关头文件.常量 //参考了网友sailinghz在CSDN论坛的帖子:http://bb ...
 - Failed to load PDF in chrome/Firefox/IE
			
笔者的公司搭建了一个Nexus服务器,用来管理我们自己的项目Release构件和Site文档. 今天的问题是当用户访问一个Site里的PDF文件的时候,报错说“detected that the ne ...
 - UCenter uc_user_synlogin同步登陆返回值为空(NULL)的解决办法 及 ucenter原理
			
第一种方法最近刚刚接触UCenter,很多问题不是很理解,只是在摸索着.尝试着做,就在刚才有解决了一个问题,虽然不知道解决问题的具体原理,但是还是实现了同步登陆.首先我是在本地测试的,也就是local ...
 - django 用户登陆注册
			
注册登陆 views.py #!/usr/bin/env python # -*- coding:utf- -*- from django.shortcuts import render,render ...
 - hive 的mysql配置
			
hive默认使用的是Derby数据库,Derby是一个嵌入式数据库,数据库一般创建在运行hive命令的目录,如果切换目录运行,则找不到数据库 hive mysql配置: 官网地址:https://cw ...
 - VS中使用系统的环境变量作为INCLUDE和LIBPATH的值
			
所谓INCLUDE的值实际上就是头文件的搜索路径,而LIBPATH就是.lib的搜索路径,对应着命令行中的/I和/LIBPATH选项 假设你有一个 D:/demo/abc/include/abc.h, ...
 - ios添加方法快捷方式