洛谷P1144最短路计数题解
最短路计数
此题还是寻找从1到i点总共有几个最短路且每条边的边长为1,对于这种寻找最短路的个数,我们可以反向搜索,即先用\(SPFA\)预处理出所有点的最短路,然后我们反向记忆化搜索,可以用\(sum[i]\)表示从i到1的最短路个数,然后我们初始化\(sum[1] = 1\),然后就可以了
代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#define rqy 100003
using namespace std;
int n,m,lin[1000100],tot,dis[1000010],sum[1000010]={0,1},vis[1000010];
queue<int> q;
struct cym{
	int to,next;
}e[1000100];
void add(int u,int v)
{
	e[++tot].to=v;
	e[tot].next=lin[u];
	lin[u]=tot;
}
int dfs(int u)
{
	if(sum[u])
	return sum[u];
	for(int i=lin[u];i;i=e[i].next)
	  if (dis[u] == dis[e[i].to]+1) // 双向图所以可以反向搜索,说明to是u的上一层节点中的一个,也就是说to比 u 靠近 1
	  sum[u]=(sum[u]+dfs(e[i].to))%rqy;
	return sum[u];
}
int main()
{
	scanf("%d%d",&n,&m);
	memset(dis,0x3f,sizeof(dis));
	dis[1]=0;
	q.push(1);
	for (int i = 1; i <= m; i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		add(x,y);
		add(y,x);
	}
	while (!q.empty())
	{
		int cur=q.front();
		q.pop();
		vis[cur]=0;
		for(int i=lin[cur];i;i=e[i].next)
		{
			if(dis[cur]+1<dis[e[i].to])
			{
				dis[e[i].to]=dis[cur]+1;
				if(!vis[e[i].to])
				{
					q.push(e[i].to);
					vis[e[i].to]=1;
				}
			}
		}
	}
	for(int i=1;i<=n;i++)
	printf("%d\n",dfs(i));
}
洛谷P1144最短路计数题解的更多相关文章
- 洛谷 P1144 最短路计数 题解
		P1144 最短路计数 题目描述 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点\(1\)开始,到其他每个点的最短路有几条. 输入格式 第一行包含\(2\)个正 ... 
- 洛谷P1144 最短路计数(SPFA)
		To 洛谷.1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M ... 
- 洛谷——P1144 最短路计数
		P1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶 ... 
- 洛谷 P1144 最短路计数 解题报告
		P1144 最短路计数 题目描述 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 第一行包含2个正 ... 
- 洛谷P1144 最短路计数 及其引申思考
		图论题目练得比较少,发一道spfa的板子题目- 题目:P1144 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: ... 
- 洛谷 P1144 最短路计数
		传送门:https://www.luogu.org/problemnew/show/P1144 这虽然是一道普及+的题,然而我发现我现在还没做过,这也就直接导致我今天模拟T2只杠了个暴力分…… 那这道 ... 
- 洛谷P1144——最短路计数
		题目:https://www.luogu.org/problemnew/show/P1144 spfa跑最短路的同时记录cnt数组表示到达方案数. 代码如下: #include<iostream ... 
- 洛谷P1144 最短路计数【堆优化dijkstra】
		题目:https://www.luogu.org/problemnew/show/P1144 题意:问1到各个节点的最短路有多少条. 思路:如果松弛的时候发现是相等的,说明可以经过该点的最短路径到达当 ... 
- 洛谷 P1144 最短路计数 Label:水
		题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶点数与边数. 接下来M行 ... 
随机推荐
- logstash grok内置规则
			logstash grok 内置正则 https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns USERNAME [ ... 
- 一些leetcode算法题
			DFS算法 思想:一直往深处走,直到找到解或者走不下去为止 DFS(dep,...) // dep代表目前DFS的深度 { if (找到解或者走不下去了){ return; } 枚举下种情况,DFS( ... 
- latex 图片标题居中
			1.有一个全局图片标题居中的方法: \usepackage[justification=centering]{caption} 2.如果排版时有的图标题想左对齐,有的想居中,前一个方法就不好了,这里可 ... 
- __new__和__init__的区别
			__new__是一个静态方法,而__init__是一个实例方法. __new__方法会返回一个创建的实例,而__init__什么都不返回. 只有在__new__返回一个cls的实例时后面的__init ... 
- Day2 列表,元组,字典,集合
			一,列表 定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素. list=['alex', 'jack', 'chen', 'shaoye'] #创建一个列表. 特性: 1.可存 ... 
- MyBatis的demo
			把以前写的关于mybatis的demo放在这边,以便查看. 目录结构: package com.test.mybatis.util; import java.io.IOException; impor ... 
- CDH 6.0.1 集群搭建 「Before install」
			从这一篇文章开始会有三篇文章依次介绍集群搭建 「Before install」 「Process」 「After install」 继上一篇使用 docker 部署单机 CDH 的文章,当我们使用 d ... 
- 利用 Docker 搭建单机的 Cloudera CDH 以及使用实践
			想用 CDH 大礼包,于是先在 Mac 上和 Centos7.4 上分别搞个了单机的测试用.其实操作的流和使用到的命令差不多就一并说了: 首先前往官方下载包: https://www.cloudera ... 
- bpmn.js & BPMN diagram
			bpmn.js & BPMN diagram BPMN 2.0 for the web https://github.com/bpmn-io/bpmn-js https://demo.bpmn ... 
- linux服务器运维
			1. grep正则匹配 grep -E "([0-9]{1,3}\.){4}" filepath egrep "([0-9]{1,3}\.){4}" fil ... 
