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

维护 DAG 中所有节点可达节点数量 可以做到线性吗?

很简单,对吧?DFS 或者 BFS 一遍,EZ 秒了。

我要 BFS!

graph

这张图能够给出几乎所有 hack。考虑 BFS,\(f_i\) 表示 \(i\) 的能到达节点,显然在这里转移是 \(f_u=\sum f_v\)\(v\)\(u\) 的所有直接后继。那么在图中,\(f_1=f_2+f_5\) 会导致 \(4\) 被算重。

这是错误的

我要 DFS!

每次随便选一个没选过的节点作为 DFS 起点 \(now\),给经过的每个没访问过的节点都打上 \(tag_u=now\),每次转移判断如果没访问过直接给 \(f_u\)\(f_v\),访问过且不是本次 DFS 访问到的(即 \(tag_u\neq now\))就加上 \(f_v\)。看起来挺理想的,但是在上图中,如果你选择 \(8\) 为一开始 DFS 的节点,经过 \(8,7,6,4\),然后在选 \(1\) 开始 DFS,这时候 \(5,3\) 的后继都是不是本次 DFS 访问到的节点,都直接加 \(f_6+f_4\)\(4\) 节点仍然算重。

这是错误的

我要……

对于任意 DAG 目前现存唯一正确解就是用 bitset 维护可达点集合然后每次转移取并集。但是如果题目中 DAG 有一定规律那么可以利用它快速完成取并集的操作,比如,可达的节点一定是一段连续的区间。

最后,如果有哪位天才想出了线性做法请第一时间让我知道,谢谢。

http://www.sczhlp.com/news/12237/

相关文章:

  • 飞算 JavaAI------编程神器
  • 分布式缓存接口正确用法
  • 第九节:幂等性方案实操最全汇总(删除token、pageId+原子自增、分布式锁、布隆过滤器、提前生成订单号)
  • 纷享销客现场服务Agent:重新定义企业服务质量的AI智能引擎
  • Visual Studio 2022(VS2022)激活密钥
  • 实现Channel模块,主要是对连接进行事件管理,主要管理这个连接监控了什么事件,以及事件就绪之后该如何处理等操作。 - 教程
  • 生成式大模型的预训练流程
  • 将Kali Linux中的Firefox浏览器语言设置为中文
  • python项目使用虚拟环境后,只有pyhon,没有pip
  • 二维原子材料显著缩小量子比特体积
  • 基于Java+Springboot+Vue开发的婚纱影楼摄影预约管理系统源码+运行
  • 类库项目生成后自动将某dll文件复制到指定路径处
  • 设计模式优化 - 极致的抽象
  • linux-日常操作记录
  • 详解DMA配置全流程
  • acme.sh生成证书
  • Eslint 所有规则集合
  • nftables体验
  • LVM配置
  • 再谈属性注入ControllerAsServices
  • Canvas的用法和实例应用
  • 让NCCL性能起飞的NCCL symmetric memory是啥黑科技?— part1
  • PCIE4.0/5.0/DDR4/DDR5运用以及布局布线规则-集萃
  • RK最新平台3688(12核+4nm制程)与RK3588/76在CPU性能、存储及AI算力等方面对比分析
  • T3
  • 完整教程:Tomcat与JDK版本对照全解析:避坑指南与生产环境选型最佳实践
  • 下一代操作系统: AI OS
  • 纯Qt手撕gb28181协议/gb28181协议服务端/gb28181协议设备端/gb28181设备模拟器/gb28181虚拟监控设备
  • CRM系统到底是什么?全面解析CRM系统的定义、功能与选型
  • 自动推理技术如何优化视频平台体验