
NC51011:可达性统计
发布日期:2021-05-08 20:00:23
浏览次数:33
分类:精选文章
本文共 1519 字,大约阅读时间需要 5 分钟。
题目描述
给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量。N,M≤30000N,M \leq 30000N,M≤30000。
输入描述
第一行两个整数N,M,接下来M行每行两个整数x,y,表示从x到y的一条有向边。
输出描述
共N行,表示每个点能够到达的点的数量。
解析
题目所要求的每个点可以到达的点的数目。其实也就是统计 当前点所指向的点的数目 + 所指向的点的可以到达的点的数目 + 1
这一步很明显是一个递推的过程,所以我们需要找到最低层的点,然后一步一步往前推。 因为这是一个有向无环图,考虑使用拓扑排序,来确定一个合理的从后往前遍历顺序,然后从最低层开始统计。 这里统计数量,我们利用 stl 的 bitset。
bit[v][v] = 1;for (int j = 0;j < G[v].size();j ++){ bit[v] = bit[v] | bit[G[v][j]];}
AC代码:
includeusing namespace std;const int maxn = 30000 + 5;int in[maxn],n,m;vector G[maxn];vector topop; //存放拓扑排序后的顺序bitset<30005> bit[maxn];void Topo_sort(){ //拓扑排序 queue que; for (int i = 1;i <= n;i ++){ if (in[i] == 0) que.push(i); } while (!que.empty()){ int top = que.front(); topop.push_back(top); que.pop(); for (int i = 0;i < G[top].size();i ++){ in[G[top][i]] --; if (in[G[top][i]] == 0) que.push(G[top][i]); } }}//反向统计每个顶点可达的顶点数量void Count(){ int len = topop.size(); for (int i = len - 1;i >= 0;i --){ int v = topop[i]; bit[v].reset(); bit[v][v] = 1; //本身可达 for (int j = 0;j < G[v].size();j ++){ bit[v] = bit[v] | bit[G[v][j]]; } } for (int i = 1;i <= n;i ++){ cout << bit[i].count() << endl; }}int main(){ cin >> n >> m; while (m -- ){ int u,v; cin >> u >> v; G[u].push_back(v); in[v] ++; } Topo_sort(); Count(); return 0;}
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月15日 20时35分51秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MySQL-时区导致的时间前后端不一致
2019-03-05
2021-04-05阅读小笔记:局部性原理
2019-03-05
go语言简单介绍,增强了解
2019-03-05
架构师入门:搭建基本的Eureka架构(从项目里抽取)
2019-03-05
MongoDB 快速扫盲贴
2019-03-05
one + two = 3
2019-03-05
sctf_2019_easy_heap
2019-03-06
PyQt5之音乐播放器
2019-03-06
Redis进阶实践之十八 使用管道模式提高Redis查询的速度
2019-03-06
SQL注入
2019-03-06
MPI Maelstrom POJ - 1502 ⭐⭐ 【Dijkstra裸题】
2019-03-06
Problem 330A - Cakeminator (思维)
2019-03-06
LeetCode75 颜色分类 (三路快排C++实现与应用)
2019-03-06
C语言+easyX图形库的推箱子实现
2019-03-06
调试vs2019代码的流程
2019-03-06
脱壳与加壳-加壳-6-代码实现加密导入表
2019-03-06
Typora配置PicGo时,提示Failed to fetch
2019-03-06
bcolz的新操作
2019-03-06
delete对象时会自动调用类的析构函数
2019-03-06
POD类型
2019-03-06