Problem

考察算法:拓扑排序 + \(DP\) + \(Dijkstra\)。

题目简述

给出一个无向无权图,问从顶点 \(1\) 开始,到其他每个点的最短路有几条。

思路

  • 先求出 \(1\) 号点到每个点的最短路 \(d_i\) 。

  • 分析每条边 $(x,y) $:

    如果 d[x] + 1 == d[y]:这条边有用。

  • 将所有有用的边拓扑排序。

  • 处理队列里面的每一个点 \(x\) ,\(dp_[i] = 1\) ,枚举 \(x\) 所有的出边 \(u\) ,\(dp_u += dp_x\)。

  • 记住要边加边取余数!

代码

#include <bits/stdc++.h>

using namespace std;

const int N = 2e6 + 10, MOD = 100003;
typedef pair<int, int> PII;
struct node {
int from, to, next;
} a[N * 2];
int pre[N], k, in[N], flag[N];
queue<int> q; int n, m, x, y, d[N], dp[N];
bool f[N]; void add(int x, int y) {
a[++k] = (node) {x, y, pre[x]};
pre[x] = k;
} void Dijkstra() {
priority_queue<PII, vector<PII>, greater<PII> > q;
memset(d, 0x3f, sizeof(d));
d[1] = 0;
q.push(make_pair(0, 1));
while (!q.empty()) {
PII h = q.top();
q.pop();
int dis = h.first, p = h.second;
if (f[p]) continue;
f[p] = true;
for (int i = pre[p]; i; i = a[i].next) {
int to = a[i].to;
if (d[p] + 1 < d[to]) {
d[to] = d[p] + 1;
q.push(make_pair(d[to], to));
}
}
}
} int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; i++) {
scanf("%d%d", &x, &y);
add(x, y);
add(y, x);
}
Dijkstra();
for (int i = 1; i <= k; i++) {
if (d[a[i].to] - d[a[i].from] == 1) {
flag[i] = 1;
in[a[i].to]++;
}
}
for (int i = 1; i <= n; i++) {
if (!in[i]) {
if (d[i] != 0x3f3f3f3f)
dp[i] = 1;
q.push(i);
}
}
while (!q.empty()) {
int h = q.front();
q.pop();
for (int i = pre[h]; i; i = a[i].next) {
if (!flag[i]) continue;
int to = a[i].to;
dp[to] = (dp[h] + dp[to]) % MOD;
in[to]--;
if (!in[to]) q.push(to);
}
}
for (int i = 1; i <= n; i++) {
printf("%d\n", dp[i]);
}
return 0;
}

P1144 最短路计数 题解的更多相关文章

  1. 洛谷 P1144 最短路计数 题解

    P1144 最短路计数 题目描述 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点\(1\)开始,到其他每个点的最短路有几条. 输入格式 第一行包含\(2\)个正 ...

  2. P1144 最短路计数 题解 最短路应用题

    题目链接:https://www.luogu.org/problem/P1144 其实这道题目是最短路的变形题,因为数据范围 \(N \le 10^6, M \le 2 \times 10^6\) , ...

  3. 洛谷P1144最短路计数题解

    最短路计数 此题还是寻找从1到i点总共有几个最短路且每条边的边长为1,对于这种寻找最短路的个数,我们可以反向搜索,即先用\(SPFA\)预处理出所有点的最短路,然后我们反向记忆化搜索,可以用\(sum ...

  4. 洛谷——P1144 最短路计数

    P1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶 ...

  5. P1144 最短路计数

    P1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶 ...

  6. 洛谷 P1144 最短路计数 解题报告

    P1144 最短路计数 题目描述 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 第一行包含2个正 ...

  7. 解题报告:luogu P1144 最短路计数

    题目链接:P1144 最短路计数 很简单的一道\(dfs\),然而我又跑了一遍\(dij\)和排序,时间复杂度是\(O(nlog n)\) 注意:\(1\).搜索时向\(dis[j]=dis[cur] ...

  8. 洛谷P1144 最短路计数 及其引申思考

    图论题目练得比较少,发一道spfa的板子题目- 题目:P1144 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: ...

  9. 洛谷P1144 最短路计数(SPFA)

    To 洛谷.1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M ...

  10. Luogu P1144 最短路计数 【最短路】 By cellur925

    题目传送门 常规的最短路计数问题:注意有重边(重边不用理,看样例),自环(读入时过滤). 另外这个无向图没有权,其实可以直接bfs做,但考虑到以后带权的情况,按spfa走了. 水题被卡了三次(嘤嘤嘤 ...

随机推荐

  1. 【Mybatis】动态SQL

    目录 动态SQL if语句 动态SQL if+where语句 动态SQL if+set语句 动态SQL choose(when,otherwise)语句 动态SQL trim语句 动态SQL SQL片 ...

  2. 瞬间抠图!揭秘 ZEGO 绿幕抠图算法背后的技术

    抠图是图像处理中最常见的操作之一,指的是将图像中需要的部分从画面中精确的提取出来. 抠图的主要功能是为了后期的合成做准备.在 Photoshop 中,抠图的方法有很多种,最常见的有通道抠图.蒙版抠图. ...

  3. 基于SM4和LSB算法实现图片数字水印加密软件(密码赛)

    一.前言 密码赛和星火杯时做的小项目,密码赛的时候是个半成品,没有过初赛,星火杯之前完善了 设计思路 最开始是想做一个图片水印用作对图片来源的不可否认性做保护,又考虑保护数据完整性,因此选中了易损水印 ...

  4. 数据库连接池之c3p0-0.9.1.2,16年的古董,发生连接泄露怎么查(一)

    背景 这篇文章是写给有缘人的,为什么这么说呢,因为本篇主要讲讲数据库连接池之c3p0-0.9.1.2版本. 年轻的朋友,可能没怎么听过c3p0了,或者也仅限于听说,这都很正常,因为c3p0算是200几 ...

  5. Hexo博客Next主题友链页面

    博客友链太多,需要自定义一个友情链接页面 link渲染文件 在 hexo/themes/next/layout 目录下建一个 link.swig文件,写入以下代码 {% block content % ...

  6. stegsolve与zsteg的使用

    zsteg 介绍:用来检测PNG和BMP中隐藏数据的工具,可以快速提取隐藏信息 使用环境:kali kali自带zsteg,可以用这个指令使用 gem install zsteg 下载完之后查看使用方 ...

  7. Go 匿名返回值的坑——这道题据说 90% 的同学都答错了!

    今天分享的内容比较基础,准确地说是 Go 的语言特性--命名.匿名返回值. 先看下面的例子,猜测会输出什么? package main func main() { println(A()) print ...

  8. Nginx配置网站默认https

    Nginx配置网站默认https 一.安装Nginx yum install nginx -y 二.修改nginx.conf vim /etc/nginx/nginx.conf 配置80转443 配置 ...

  9. 基于Taro开发京东小程序小记

    一.小程序基础模型 这里要从微信小程序的历史说起,从前身到现在大概分为3个阶段: 阶段1: 微信网页需要用到app的原生能力,微信官方推出了js-sdk 阶段2: 解决移动端白屏问题,采用微信web资 ...

  10. JavaScript代码片段精选

    今天,我在职坐标的微信公众号里面看到了关于  JavaScript代码片段精选 的 微信软文.在实际开发中,我们经常会使用的JS来实现某些功能.今天,就在此总结一下. 1.浮点数取整 const x ...