CH2101可达性问题
CH2101可达性问题
拓扑排序应用基础
题意描述
具体见书P95。
给定一个N个点,M条边的有向无环图,问每个点直接或间接可到达的点的数量。
算法分析
书中有详细介绍,这里就不再赘述了。
简而言之就是拓扑排序+状态压缩 。
代码实现
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cmath>
#include<bitset>
#include<vector>
#include<queue>
#define N 30030
#define M 30030
using namespace std;
int n,m,f[N],side[N];
int head[N],cnt=0;
struct node{
int to,next;
}edge[M];
vector<int>path;
bitset<M>b[N];
queue<int>q;
void addedge(int x,int y){
cnt++;
edge[cnt].next=head[x];
edge[cnt].to=y;、
head[x]=cnt;
return;
}
void topo(){
for(int i=1;i<=n;i++){
if(!side[i]) q.push(i)
}
while(!q.empty()){
int now=q.front();
q.pop();
path.push_back(now);
for(int i=head[now];i;i=edge[i].next){
int y=edge[i].to;
if(!--side[y]) q.push(y);
}
}
return;
}
int main(){
memset(side,0,sizeof(side));
scanf("%d %d",&n,&m);
int u,v;
for(int i=1;i<=m;i++){
scanf("%d %d",&u,&v);
addedge(u,v);
side[v]++;
}
topo();
for(int i=path.size()-1;i>=0;i--){
int u=path[i];
b[u][u]=1;
for(int j=head[u];j;j=edge[j].next){
int v=edge[j].to;
b[u]|=b[v];
}
}
for(int i=1;i<=n;i++){
printf("%d\n",b[i].count());
}
return 0;
}
结语
(逃…
CH2101可达性问题的更多相关文章
- CH2101 可达性统计
题意 给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量.N,M≤30000. 分析 有向无环图,可以按拓扑序逆序统计答案.可以用bitset维护可达性. 时间复杂度\(O(N ...
- CH2101 可达性统计(算竞进阶习题)
拓扑排序+状态压缩 考虑每一个点能够到达的所有点都是与该店相邻的点的后继节点,可知: 令f[u]表示u点可到达的节点个数,f[u]={u}与f[v](u, v)的并集 于是可以利用状态压缩,能够到达的 ...
- 「CH2101」可达性统计 解题报告
CH2101 可达性统计 描述 给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量.N,M≤30000. 输入格式 第一行两个整数N,M,接下来M行每行两个整数x,y,表示从x到 ...
- JVM 基础:回收哪些内存/对象 引用计数算法 可达性分析算法 finalize()方法 HotSpot实现分析
转自:https://blog.csdn.net/tjiyu/article/details/53982412 1-1.为什么需要了解垃圾回收 目前内存的动态分配与内存回收技术已经相当成熟,但为什么还 ...
- java垃圾回收机制--可达性算法
先说一些题外话,Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区,这些区分为线程私有区和线程共享区 1.线程私有区 a.程序计数器 记录正在执行的虚拟机字节码指令地址 ...
- 读书笔记-2java虚拟机的可达性算法与finalize方法
JAVA通过可达性分析算法来确定堆中哪些对象是应该被回收的. 非常多人包含我曾经在不了解的时候总以为是通过引用计数器来推断某个对象是否应该被回收可是后来想了想包含查阅一些资料发现不是这种.由于假设採用 ...
- 懒癌晚期学图论的时候自己用C语言写了个求可达性矩阵的算法~
可达性矩阵算法~ 直接上代码 #include <iostream> #include <cstring> using namespace std; #define n 5 v ...
- JAVA垃圾回收-可达性分析算法
在java中是通过引用来和对象进行关联的,也就是说如果要操作对象,必须通过引用来进行.那么很显然一个简单的办法就是通过引用计数来判断一个对象是否可以被回收.不失一般性,如果一个对象没有任何引用与之关联 ...
- And Reachability CodeForces - 1169E (有向图可达性)
大意: 给定序列$a$, 对所有的a[i]&a[j]>0, 从$i$向$j$连一条有向边, 给出$m$个询问$(x,y)$, 求是否能从$x$到达$y$. 裸的有向图可达性, 有向图可达 ...
随机推荐
- html 网页美化--2
html网页美化: 鼠标点击特效:爱心.爆炸烟花(有些特效在Chrome中无法实现,推荐使用edge) 背景樱花花瓣 鼠标滑动彩带 此代码也可以用于博客园主页美化(需要申请JS权限):复制到博客侧边栏 ...
- Dell XPS 7590 Hackintosh
网上主流引导Hackintosh的工具有Chameleon, Clover和OpenCore. 但是随着Hackintosh重要驱动开发团队acidanthera逐渐转向OpenCore,后者显然才是 ...
- OpenCV计算机视觉学习(3)——图像灰度线性变换与非线性变换(对数变换,伽马变换)
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 下面 ...
- JVM系列【4】内存模型
JVM系列笔记目录 虚拟机的基础概念 class文件结构 class文件加载过程 jvm内存模型 JVM常用指令 GC与调优 硬件层数据一致性 - 存储器层次结构 从L6-L0 空间由大变小,速度由慢 ...
- SpringCache整合Redis
之前一篇文章 SpringBoot整合Redis 已经介绍了在SpringBoot中使用redisTemplate手动 操作redis数据库的方法了.其实这个时候我们就已经可以拿redis来做项目了, ...
- 【基线检查】(高)基线检查--禁用local-infile选项(访问控制)
(高)基线检查--禁用local-infile选项(访问控制) 描述 禁用local_infile选项会降低攻击者通过SQL注入漏洞器读取敏感文件的能力 检查提示 -- 加固建议 编辑Mysql配置文 ...
- ubuntu20 使用命令安装 rabbitmq
安装 rabbitmq sudo apt-get install erlang-nox -y sudo apt-get update sudo apt-get install rabbitmq-ser ...
- 多测师讲解python _unttest框架001(基本格式)_高级讲师肖sir
1.unittest基本介绍 import unittest #导入unittest模块 #class Test(unittest.TestCase): def setUp(self): #创建dri ...
- 如何制作一个vagrant box
因为要用的窗口应用,基于服务器的各种box不能使用(曾经尝试安装桌面,没有成功).所以试着基于Ubuntu的虚拟机创建自己的box. 过程中主要参考了这篇文章:http://www.360do ...
- openresty使用redis作本地缓存
一,为什么要使用redis作本地缓存? 1,使用缓存通常会有三层 当使用openresty作为web服务器时,我们更看重是的它可以通过lua编程的扩展能力,就openresty而言,它可以实现的功能非 ...