题解 P1144 【最短路计数】
这道题用一次SPFA就可以过了。在求最短路的同时,对答案进行统计即可。
实现:
\(dis_i\)表示从1到\(i\)的最短路(实在还是不懂的话看程序吧)。
- 当\(dis_i>dis_j+1\)时,直接令\(ans_i=ans_j\)即可。
- 当\(dis_i=dis_j+1\)时,那么到\(i\)的路径就可以多加上\(j\)的路径,即\(ans_i=ans_i+ans_j\)。
代码:
#include <bits/stdc++.h>
using namespace std;
int n , m , p = 100003;
int ans[1000010] , dis[1000010];
bool vis[1000010];
vector<int> a[1000010];
queue<int> q;
void spfa(){
q.push(1);
ans[1] = 1;
vis[1] = 1;
dis[1] = 0;
while(!q.empty()){
int x = q.front();
q.pop();
for(int i = 0; i < a[x].size(); i++){
int y = a[x][i];
if(dis[y] > dis[x] + 1){
dis[y] = dis[x] + 1;
ans[y] = ans[x];
if(!vis[y]){
vis[y] = 1;
q.push(y);
}
}else if(dis[y] == dis[x] + 1) ans[y] = (ans[y] + ans[x]) % p;
}
vis[x] = 0; //出队列了就可以标记未走过了,因为我们要重复更新这个点直到最优
}
}
int main(){
cin >> n >> m;
for(int i = 1; i <= m; i++){
int x , y;
cin >> x >> y;
a[x].push_back(y);
a[y].push_back(x);
}
for(int i = 1; i <= n; i++) dis[i] = 0x7fffffff;
spfa();
for(int i = 1; i <= n; i++) cout << ans[i] << endl;
return 0;
}
题解 P1144 【最短路计数】的更多相关文章
- 洛谷 P1144 最短路计数 题解
P1144 最短路计数 题目描述 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点\(1\)开始,到其他每个点的最短路有几条. 输入格式 第一行包含\(2\)个正 ...
- 洛谷——P1144 最短路计数
P1144 最短路计数 题目描述 给出一个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个正 ...
- 解题报告:luogu P1144 最短路计数
题目链接:P1144 最短路计数 很简单的一道\(dfs\),然而我又跑了一遍\(dij\)和排序,时间复杂度是\(O(nlog n)\) 注意:\(1\).搜索时向\(dis[j]=dis[cur] ...
- P1144 最短路计数 题解 最短路应用题
题目链接:https://www.luogu.org/problem/P1144 其实这道题目是最短路的变形题,因为数据范围 \(N \le 10^6, M \le 2 \times 10^6\) , ...
- 洛谷P1144最短路计数题解
最短路计数 此题还是寻找从1到i点总共有几个最短路且每条边的边长为1,对于这种寻找最短路的个数,我们可以反向搜索,即先用\(SPFA\)预处理出所有点的最短路,然后我们反向记忆化搜索,可以用\(sum ...
- 洛谷P1144 最短路计数 及其引申思考
图论题目练得比较少,发一道spfa的板子题目- 题目:P1144 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: ...
- 洛谷P1144 最短路计数(SPFA)
To 洛谷.1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M ...
- Luogu P1144 最短路计数 【最短路】 By cellur925
题目传送门 常规的最短路计数问题:注意有重边(重边不用理,看样例),自环(读入时过滤). 另外这个无向图没有权,其实可以直接bfs做,但考虑到以后带权的情况,按spfa走了. 水题被卡了三次(嘤嘤嘤 ...
随机推荐
- Java实现 LeetCode 419 甲板上的战舰
419. 甲板上的战舰 给定一个二维的甲板, 请计算其中有多少艘战舰. 战舰用 'X'表示,空位用 '.'表示. 你需要遵守以下规则: 给你一个有效的甲板,仅由战舰或者空位组成. 战舰只能水平或者垂直 ...
- java实现 猜数字游戏
猜数字游戏 猜数字 很多人都玩过这个游戏:甲在心中想好一个数字,乙来猜.每猜一个数字,甲必须告诉他是猜大了,猜小了,还是刚好猜中了.下列的代码模拟了这个过程.其中用户充当甲的角色,计算机充当乙的角色. ...
- java实现第六届蓝桥杯打印大X
打印大X 打印大X 小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度. 为了便于比对空格,所有的空白位置都以句点符来代替. 要求输入两个整数m n,表示笔的宽度,X的高度.用 ...
- jmeter怎么衡量tps的值
jmeter也没有tps这么个报告数据,后来又翻了翻loadrunner关于tps的定义 1.TPS:Trasaction per second也就是事务数/秒.它是软件测试结果的测量单位.一个事务是 ...
- Linux网卡驱动移植--Dm9000网卡驱动分析
1. Linux网络体系结构由以下5部分组成 ① 系统调用接口: 位于Linux网络子系统的顶部,为应用程序提供访问内核网络子系统的方法,主要指socket系统调用. ② 协议无关接口: 实现一组基于 ...
- ES6优雅的异步操作Promise()
一.Promise()的基本使用 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- EIGRP-13-弥散更新算法-停滞在活动状态
如果一台路由器参与到了针对某个目的地的弥散计算中(即将相应路由置为活动状态,并发送查询包),它必须首先等待所有邻居都返回响应包,之后它才能执行自已的弥散计算,接着选出新的最优路径,最后开始发送自已的响 ...
- [AGC034F]RNG and XOR
题目 点这里看题目. 分析 第一步可以将\(A\)数组转化成概率\(P(j)\):每一步操作异或\(j\)的概率. 接着发现,\(x\)从\(0\)变成\(i\)的期望等于\(x\)从\( ...
- log4j2简介
Apache Log4j 2 Apache Log4j 2是对Log4j的升级,它比它的前辈Log4j 1提供了显著的改进.在解决Logback的架构中存在的一些固有问题时,提供了许多可用的改进. 特 ...
- TensorFlow从0到1之TensorFlow多层感知机实现MINIST分类(22)
TensorFlow 支持自动求导,可以使用 TensorFlow 优化器来计算和使用梯度.它使用梯度自动更新用变量定义的张量.本节将使用 TensorFlow 优化器来训练网络. 前面章节中,我们定 ...