当前位置: 首页 > news >正文

洛谷题目:P10480 可达性统计 题解(本题简)

个人介绍: 

 

          

 题目传送门:

P10480 可达性统计 - 洛谷 (luogu.com.cn)

前言:

这道题要求在给定的有向无环图(DAG)中,统计从每个点出发能够到达的点的数量。下面是小亦为大家分享的解题思路:

#整体题目思路概括:

我们的核心目标是对图中的每个节点,找出它能到达的素有节点。由于图是有向无环图,我们可以利用深搜算法的特性,通过递归的方式从每个节点开始搜索其所有可达节点。为了高效地记录和合并可达节点的信息我们使用 bitset 数据结构。

##具体步骤:

        1、图的表示:

                我们使用临街表来表示有向无环图。邻接表是一种常见图的存储方式,对于图中的每个节点,我们用一个动态数组来存储从该节点出发的所有有向边的重点。

       2、可达性记录:

                使用 bitset 数组 reachable[MAXN] 来记录从每个节点能够到达的节点情况。 

        3、深搜:

                3.1、递归搜索:定义一个 dfs 函数,用于从某个节点开始进行深搜。对于每个节点 u ,首先检查 reachable[u] 是否已经计算过,如果已经计算过的话则直接返回,碧莲重复计算。

                3.2、自身可达性:将 reachable[u][u] 置为 1 ,表示节点 u 可以到达自身。

                3.3、邻接节点搜索:遍历节点 u 的所有邻接节点 v ,递归调用 dfs(v) 来计算从节点 v 出发能够到达的节点。然后将 reachable[v] 合并到 reachable[u] 中,即 reachable[u] | = reachable[v] ,这一步使用按位或操作,将 reachable[v] 中为 1 的位也设置到 reachable[u] 中。

        4、主函数处理:

                4.1、输入读取:读取图的节点数量 n 和边的的数量 m ,并依次读取每条边的节点 x 和终点 y ,将 y 添加到 graph[x] 中,完成图的构建。

                4.2、遍历节点:对图中的每个节点 i ,调用 dfs(i) 函数计算从该节点出发能够到达的节点。然后输出 reachable[i].count() , 即 reachable[i] 中为 1 的位的数量,也就是从节点 i 能够到达的节点数量。

###复杂度:        

        1、时间复杂度:

                O(N*(N+M)/32)

        2、空间复杂度:

                O(N^2/8)

####代码:

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 40000;
// 存储图的邻接表
vector<int> graph[MAXN];
// 用于记录从每个点出发能到达的点的情况
bitset<MAXN> reachable[MAXN];// 深度优先搜索函数
void dfs(int u) {if (!reachable[u].none()) return;reachable[u][u] = 1;for (int v : graph[u]) {dfs(v);reachable[u] |= reachable[v];}
}int main() {int n, m;cin >> n >> m;// 读入边信息,构建图for (int i = 0; i < m; ++i) {int x, y;cin >> x >> y;graph[x].push_back(y);}// 对每个点进行深度优先搜索for (int i = 1; i <= n; ++i) {dfs(i);// 输出从点 i 出发能到达的点的数量cout << reachable[i].count() << endl;}return 0;
}

                                                                         感谢观看!!!

制作:Code.小亦
代码提供:Code.小亦
如在阅读中发现知识性错误、代码错误、错别字错误等情况私信博主或评论或通过邮箱2952104443@qq.com。

另:题目来源:首页 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)


http://www.mrgr.cn/news/100869.html

相关文章:

  • PostgreSQL:pgAdmin 4 使用教程
  • Android12 Rom定制设置默认语言为中文
  • Stm32 烧录 Micropython
  • 虚幻商城 Quixel 免费资产自动化入库(2025年版)
  • w~大模型~合集14
  • 腾讯元宝桌面客户端:基于Tauri的开源技术解析
  • Java集合框架终极指南:从基础到高级应用
  • 超全SpringMVC知识点!!(万字总结)
  • UI设计之photoshop学习笔记
  • Java ResourceBundle 资源绑定详解
  • 国标GB28181平台EasyGBS未来研发方向在哪?
  • 【RAG 框架部署】LangChain-Chatchat (原 Langchain-ChatGLM) + Ollama
  • AI驱动的决策智能系统(AIDP)和自然语言交互式分析
  • systemd和OpenSSH
  • 玩转MCP
  • 逻辑回归之参数选择:从理论到实践
  • 【Unity】MVC的简单分享以及一个在UI中使用的例子
  • 第6次课 贪心算法 A
  • WPF之RadioButton控件详解
  • 全局id生成器生产方案