首页 > 其他分享 >[ABC211D] Number of Shortest paths 题解

[ABC211D] Number of Shortest paths 题解

时间:2024-04-04 10:55:48浏览次数:28  
标签:paths int 题解 短路 Number ABC211D bfs push

[ABC211D] Number of Shortest paths 题解

思路解析

题目其实说得很明白了,就是最短路计数。我们可以用一个 \(s_i\) 表示从起点到 \(i\) 的最短路计数,然后进行 bfs,由于边权为 \(1\),所以可以使用 bfs 求最短路。如果 \(u \to v\) 是 \(v\) 的最短路的其中一段,就把 \(s_u \to s_v\) 转移即可。

注意要记得取模。

code

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10, mod = 1e9 + 7;
int n, m, d[N], s[N];
vector<int> g[N];
void bfs() {
	memset(d, 0x3f, sizeof(d));
	d[1] = 0; s[1] = 1;
	queue<int> q;
	q.push(1);
	while(!q.empty()) {
		int u = q.front(); q.pop();
		for(auto it : g[u]) {
			if(d[it] >= d[u] + 1) {
				if(d[it] > 1e8) q.push(it);
				d[it] = d[u] + 1;
				s[it] = (s[it] + s[u]) % mod;
			}
		}
	}
}
int main() {
	cin >> n >> m;
	for(int i = 1, u, v; i <= m; i++) {
		cin >> u >> v;
		g[u].push_back(v);
		g[v].push_back(u);
	}
	bfs();
	cout << s[n];
	return 0;
}

标签:paths,int,题解,短路,Number,ABC211D,bfs,push
From: https://www.cnblogs.com/2020luke/p/18113971

相关文章

  • [ABC221D] Online games 题解
    [ABC221D]Onlinegames题解思路解析可以发现题目就是单纯区间加和查询每一个值有多少次出现。首先看到区间修改加结束时查询可以想到差分,但是通过\(A_i\le10^9\)发现值域很大没法直接根据值差分。于是想到离散化,将每个点离散下来,统计每两个离散的时间之间在线的人乘上时间......
  • [ABC223E] Placing Rectangles 题解
    [ABC223E]PlacingRectangles题解思路解析根据题目可知,其实三个长方形无非只有以下两种摆放方式。若大长方形长为\(y\),宽为\(x\),则我们对于第一种情况就固定住宽,判断能否使长度小于等于长;对于第二种情况同样固定住宽,此时A长方形右边空间的长就确定了,就只需要判断B,C......
  • [ABC221E] LEQ 题解
    [ABC221E]LEQ题解思路解析很有思维量的一道题。首先根据题目要求发现,新求的子序列只跟子序列的头尾有关,而在确定头尾之后中间的元素选或不选没有任何关系。也就是确定新子序列的头尾下标分别为\(i,j\),那么以当前头尾的可行子序列个数就是\(2^{j-i-1}=2^j\div2^{i+1}\)种......
  • 【阿里淘天笔试题汇总】2024-04-03-阿里淘天春招笔试题(第一套)-三语言题解(CPP/Pytho
    ......
  • 【阿里淘天笔试题汇总】2024-04-03-阿里淘天春招笔试题(第二套)-三语言题解(CPP/Pytho
    ......
  • Luogu P8710 [蓝桥杯 2020 省 AB1] 网络分析 题解 [ 绿 ] [ 带权并查集 ]
    原题分析本题由于从一个节点发信息,同一个集合内的所有点都会收到信息,显然是一道要求维护各节点间关系的题,因此采用并查集的数据结构进行求解。但由于维护关系的同时还要维护权值,所以采用带权并查集,它是一种能维护某个节点与其祖宗节点之间关系的数据结构。带权并查集找父亲的......
  • 大学教材《C语言程序设计》(浙大版)课后习题解析 | 第九、十章
    概述    本文主要提供《C语言程序设计》(浙大版)第九、十章的课后习题解析,以方便同学们完成题目后作为参考对照。后续将更新第十一、十二章节的课后习题解析,如想了解更多,请持续关注该专栏。专栏直达链接:《C语言程序设计》(浙大版)_孟俊宇-MJY的博客-CSDN博客​http://......
  • P10296 [CCC 2024 S2] Heavy-Light Composition 题解
    思路先扫一遍,计算每个字母出现的数量,然后判断是否是交替出现。代码#include<bits/stdc++.h>usingnamespacestd;intmain(){ intT,n; cin>>T>>n; while(T--){ intt[105]={0}; strings; cin>>s; for(inti=0;i<n;i++)t[s[i]-'a&#......
  • CF1909G Pumping Lemma 题解
    题目链接题目要求我们对合法三元组进行计数,直接做是困难的,因此考虑通过枚举确定一部分元素再进行判定求解,那我们固定什么呢?固定\(x\)和\(y+z\)的分界线没啥用,因此我们枚举确定\(S\)中\(x+y\)和\(z\)的分界线,这样能确定一长串\(y^{k-1}\)所在的区间。接着我们不难想......
  • AGC066 题解
    A将网格黑白染色,将黑色格变为\(\bmod2d=0\),白色格变为\(\bmod2d=d\)。这样代价上界为\(n^2d\)。但是这样的“期望代价”是\(\frac{1}{2}n^2d\)的,考虑将黑色格变为\(\bmod2d=x\),白色格变为\(\bmod2d=d+x\),根据鸽巢原理,一定有一种方案代价在\(\frac{1}{2}n^2d......