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

「CH2101」可达性统计 解题报告相关推荐

  1. 「ZJOI2016」大森林 解题报告

    「ZJOI2016」大森林 神仙题... 很显然线段树搞不了 考虑离线操作 我们只搞一颗树,从位置1一直往后移动,然后维护它的形态试试 显然操作0,1都可以拆成差分的形式,就是加入和删除 因为保证了操 ...

  2. 「SDOI2014」数数 解题报告

    「SDOI2014」数数 题目描述 我们称一个正整数 \(N\) 是幸运数,当且仅当它的十进制表示中不包含数字串集合 \(S\) 中任意一个元素作为其子串. 例如当 \(S=(\)22, 333, 0 ...

  3. tyvj P2018 「Nescafé26」小猫爬山 解题报告

    P2018 「Nescafé26」小猫爬山 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经 ...

  4. 「JLOI2015」战争调度 解题报告

    「JLOI2015」战争调度 感觉一到晚上大脑就宕机了... 题目本身不难,就算没接触过想想也是可以想到的 这个满二叉树的深度很浅啊,每个点只会和它的\(n-1\)个祖先匹配啊 于是可以暴力枚举祖先链 ...

  5. 「CH2401」送礼物 解题报告

    CH2401 送礼物 描述 作为惩罚,GY被遣送去帮助某神牛给女生送礼物(GY:貌似是个好差事)但是在GY看到礼物之后,他就不这么认为了.某神牛有N个礼物,且异常沉重,但是GY的力气也异常的大(-_- ...

  6. LOJ#6103. 「2017 山东二轮集训 Day2」第一题 解题报告

    LOJ#6103. 「2017 山东二轮集训 Day2」第一题 解题报告 前置知识:闭区间上的连续函数的零点存在性定理: 我们定义这样的函数: 定义域为 [ l , r ] ∩ Z [l,r]\cap ...

  7. 「洛谷P1343」地震逃生 解题报告

    P1343 地震逃生 题目描述 汶川地震发生时,四川XX中学正在上课,一看地震发生,老师们立刻带领x名学生逃跑,整个学校可以抽象地看成一个有向图,图中有n个点,m条边.1号点为教室,n号点为安全地带, ...

  8. 「Luogu P2201」数列编辑器 解题报告

    数列编辑器,在线IDE 本期的主题是洛谷的在线IDE 小学生?!小学生虐我 ? 思路: 怎么说链表也是可以的吧,虽然比较繁琐 然后涉及到了前缀和和一些优化手段(应该可以说是记忆化吧)? 用p记录光标的 ...

  9. 「洛谷P3469」[POI2008]BLO-Blockade 解题报告

    P3469[POI2008]LO-Blockade 题意翻译 在Byteotia有n个城镇. 一些城镇之间由无向边连接. 在城镇外没有十字路口,尽管可能有桥,隧道或者高架公路(反正不考虑这些).每两个 ...

最新文章

  1. 解决WIN7与虚拟机CentOS的文件夹共享问题
  2. 参加动物AI奥运会,让你的智能体比狗狗还聪明,挣取3.2万美元奖金
  3. 20种处理照片的PS技术
  4. 【Python 必会技巧】使用 zip() 函数对序列进行压缩和解压操作
  5. 无法装载文件或者汇编的AjaxControlToolkit
  6. java concurrent int_Java高级特性系列--Concurrent
  7. RDMA over TCP的协议栈工作过程浅析
  8. springMVC的url重写
  9. Money----思维+模拟
  10. 用python做一个上位机串口通信_如何用pyserial实现,通过上位机执行python程序从...
  11. 安装电脑硬件要求_2019,8月,精雕设计多档次电脑硬件配置推荐
  12. NOIP2013华容道
  13. 韦根(Wiegand协议)
  14. Elasticsearch系列:番外篇-Fielddata
  15. android 自定义控件 书籍,android整理之自定义控件
  16. 大学生集体恶搞学士服猥琐拍照,谁羞辱了谁?!(图)
  17. 计算机取消右键粘贴,复制粘贴文件后鼠标右击取消粘贴功能的简单方法介绍
  18. 潮流计算程序————支路功率计算与输出程序
  19. csgo服务器搭建(linux)
  20. 哈里-凯恩脚踝韧带拉伤 预计三月初恢复训练

热门文章

  1. 典型瀑布模型四个阶段_古典瀑布模型的不同阶段
  2. Java集合unmodifiableMap()方法及示例
  3. dp 扔鸡蛋_使用动态编程(DP)的鸡蛋掉落问题
  4. 汇编语言-009(表驱动选择 、条件控制流伪指令 、逻辑移位SHL,SHR 算术移位SAL,SAR)
  5. hash函数查找和ASL计算
  6. textbox matlab,matlab gui 编程文本框更新
  7. uva 11536——Smallest Sub-Array
  8. 92. 反转链表 II golang
  9. C++类模板实例化条件
  10. linux下c/c++实例之十socket简单应用