AcWing:164. 可达性统计(拓扑排序 + 状态压缩算法)
2024-10-06 23:04:36
给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量。
输入格式
第一行两个整数N,M,接下来M行每行两个整数x,y,表示从x到y的一条有向边。
输出格式
输出共N行,表示每个点能够到达的点的数量。
数据范围
1≤N,M≤300001≤N,M≤30000
输入样例:
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
算法:拓扑排序 + 状态压缩算法
题解:首先求出该有向无环图的拓扑序列,根据拓扑序列的性质:在拓扑序种,对于任意一条边(x, y)来说,x都会排在y之前(读者可以自行画图证明)。然后倒叙遍历拓扑序来结果状态压缩来求的结果。
#include <iostream>
#include <cstdio>
#include <vector>
#include <bitset>
#include <queue> using namespace std; const int maxn = 3e4+; vector<int> g[maxn];
vector<int> a;
bitset<maxn> f[maxn]; int in[maxn];
int n, m; void topsort() {
queue<int> q;
for(int i = ; i <= n; i++) {
if(in[i] == ) {
q.push(i);
}
}
while(!q.empty()) {
int u = q.front();
q.pop();
a.push_back(u); //记录拓扑序列
int len = g[u].size();
for(int i = ; i < len; i++) {
int v = g[u][i];
if(--in[v] == ) {
q.push(v);
}
}
}
} void sovle() {
for(int i = a.size() - ; i >= ; i--) {
int u = a[i];
f[u].reset(); //清空数组
f[u][u] = ; //将当前位置赋1
int len = g[u].size();
for(int j = ; j < len; j++) {
int v = g[u][j];
f[u] = f[u] | f[v]; //将经过的点的状态压缩到当前数组中
}
}
} int main() {
scanf("%d %d", &n, &m);
for(int i = ; i <= m; i++) {
int u, v;
scanf("%d %d", &u, &v);
g[u].push_back(v);
in[v]++;
}
topsort();
sovle();
for(int i = ; i <= n; i++) {
printf("%d\n", f[i].count());
}
return ;
}
最新文章
- 原生JS下拉加载插件分享。
- ANSYS17.0详细安装图文教程
- ICTCLAS20160405分词系统调试过程
- Oracle12c client安裝報錯[INS-20802] Oracle Net Configuration Assistant failed完美解決
- HowTo Perform the spatial selection 'Share a line segment with' using ArcObjects
- 命令行 更新Android sdk
- 转:python webdriver API 之简单对象的定位
- Gstreamer基本概念介绍(开发前必读)
- 怎样加快master数据库的写操作?分表原则!将表水平划分!或者添加写数据库的集群
- data guard switchover切换异常
- MySQL 错误日志(Error Log)
- —软测试—(5)计算机系统CPU组成
- OpenGL红宝书第一个例子:绘制两个三角形
- 安装win7提示“我们无法创建新的分区,也找不到现有分区”
- 设置下载文件路径 &; 获取接口结尾名称。
- [Leetcode 78]求子集 Subset
- java遍历ftp文件夹下所有文件(或指定文件下的文件)
- DDos与CC攻击的简单个人理解
- jdk8新特性-stream
- (二)MySQL中级篇
热门文章
- java正则表达式的使唤
- NPOI_winfrom导出Excel表格(一)(合并单元格、规定范围加外边框、存储路径弹框选择)
- 可以用for循环直接删除ArrayList的特定元素吗?可能会出现什么问题?怎样解决?
- python版本
- WebStorm 启动时提示Failed to load JVM DLL
- ftp卡死问题
- 如果您的浏览器不支持javascript功能
- 第十一章、特性property
- Gitlab创建ssh key并添加配置
- JSON parse error: syntax error, expect {, actual error, pos 0, fastjson-version 1.2.58; nested exception is com.alibaba.fastjson.JSONExcetion: syntax error, except {, actual error, pos ...