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

「CH2101」可达性统计 解题报告

CH2101 可达性统计

描述

给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量。N,M≤30000。

输入格式

第一行两个整数N,M,接下来M行每行两个整数x,y,表示从x到y的一条有向边。

输出格式

共N行,表示每个点能够到达的点的数量。

样例输入

10 10
3 8
2 3
2 5
5 9
5 9
2 3
3 9
4 8
2 10
4 9

样例输出

1
6
3
3
2
1
1
1
1
1

思路

我们可以利用记忆化搜索,对于每个点,记录它能到达的点的集合。

至于怎么记录这个集合,我们采用bitset

bitset<MAXN> f[MAXN];

由于bitset十分省内存,30000大小就占用30000bit,不用担心炸空间。

还有,bitset支持位运算!你可以当做一个二进制数来操作,也可以当做一个bool数组,还支持各种神奇函数,十分强大。

bitset<MAXN> a, b;
a[1] = 1;//当做bool数组~
b[2] = 1;
a = a | b;//支持位运算~
printf("%llu\n", a.count());//统计1的个数~ 返回值是unsigned long long类型的

搜索过程十分简单,差不多是一个记忆化搜索模板。

P.S. 当然你也可以拓扑序DP

代码

#include<bits/stdc++.h>
using namespace std;
#define MAXN 30005
#define MAXM 30005
#define bs bitset<30005>

int n, m;
int hd[MAXN], nxt[MAXM], to[MAXM], tot;
bs f[MAXN];
int x, y;

inline void Add( int x, int y ){ nxt[++tot] = hd[x]; hd[x] = tot; to[tot] = y; }

void DFS( int x ){
    if ( f[x].any() ) return;
    f[x][x] = 1;
    for ( int i = hd[x]; i; i = nxt[i] )
        f[x] |= ( DFS( to[i] ), f[to[i]] );
}

int main(){
    scanf( "%d%d", &n, &m );
    for ( int i = 1; i <= m; ++i ){ scanf( "%d%d", &x, &y ); Add( x, y ); }
    for ( int i = 1; i <= n; ++i ) printf( "%llu\n", ( DFS(i), f[i].count() ) );
    return 0;
}

转载于:https://www.cnblogs.com/louhancheng/p/10100270.html

相关文章:

  • java websocket学习
  • 1600802047 android 第三次作业(音乐播放器)
  • bzoj 2555 SubString——后缀自动机+LCT
  • BZOJ3238 [Ahoi2013]差异
  • 使用Java代码自定义Ribbon配置
  • CephFS 文件系统应用
  • 第二冲刺阶段第十三天
  • 近似推断---期望传播
  • 联合国儿童基金会投资六家区块链初创企业,目标是解决“全球性挑战”
  • MaxCompute新功能发布
  • 127.0.0.1 和 0.0.0.0 地址的区别
  • k8s环境部署及使用方式
  • Django2.0——中间件
  • 蔚来总裁秦力洪:不要贴标签说ES8不好 短期压力是做好服务
  • 菜鸟问题
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • CEF与代理
  • LeetCode算法系列_0891_子序列宽度之和
  • mysql外键的使用
  • PAT A1017 优先队列
  • Python学习之路13-记分
  • Spring Boot快速入门(一):Hello Spring Boot
  • 笨办法学C 练习34:动态数组
  • 编写符合Python风格的对象
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 构造函数(constructor)与原型链(prototype)关系
  • 开发基于以太坊智能合约的DApp
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 理清楚Vue的结构
  • 前端_面试
  • No resource identifier found for attribute,RxJava之zip操作符
  • ionic异常记录
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #QT(TCP网络编程-服务端)
  • (4.10~4.16)
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (四) 虚拟摄像头vivi体验
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)Sublime Text3配置Lua运行环境
  • .gitignore文件—git忽略文件
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .Net 垃圾回收机制原理(二)
  • .net 生成二级域名
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET 使用 XPath 来读写 XML 文件
  • .NET多线程执行函数
  • ;号自动换行
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @Transactional 竟也能解决分布式事务?
  • @Transactional类内部访问失效原因详解
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会