描述

给定一张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来储存n个结点对于n个结点的可达情况,二进制直接通过或运算即可从后向前扫描拓扑序列。

#define MAX 30001
int head[MAX],nxt[MAX],ver[MAX],deg[MAX];
int a[MAX];
int n,m;
int cnt = 0,tot=0;
bitset<30001> s[MAX];
void add(int x,int y)
{ver[++tot] = y;nxt[tot] = head[x];head[x] = tot;deg[y]++;
}
void topsort()
{queue<int>q;for(int i= 1;i<=n;i++)if(deg[i]==0)q.push(i);while(q.size()){int x = q.front();q.pop();a[++cnt] = x;for(int i=head[x];i;i=nxt[i]){int y = ver[i];if(--deg[y]==0)q.push(y);}}
}
void sol()
{for(int i=cnt;i;i--){int x = a[i];s[x][x] = 1;for(int j=head[x];j;j=nxt[j]){int y=ver[j];s[x]|=s[y];}}
}
int main()
{cin>>n>>m;for(int i=0;i<m;i++){int x,y;scanf("%d%d",&x,&y);add(x,y);}topsort();sol();for(int i=1;i<=n;i++){printf("%d\n",s[i].count());}return 0;
}

转载于:https://www.cnblogs.com/1625--H/p/9484073.html

可达性统计(拓扑排序)相关推荐

  1. C语言-AOV网与拓扑排序

    邻接表: 顶点下标查找函数(LocateVex) 创建有向图的邻接表(CreateDG) 邻接表打印函数(print) 拓扑排序(TopologicalSort) AOV网与AOE网: AOV网(Ac ...

  2. P6134 [JSOI2015]最小表示(拓扑排序递推 + bitset优化,可达性统计变种)

    整理的算法模板合集: ACM模板 P6134 [JSOI2015] 题目要求删除一条边整个图的连通性是不受影响的,也就是说如果我们要删除边(x,y)(x,y)(x,y),删除以后整个图的连通性不受影响 ...

  3. 164. 可达性统计【拓扑排序 / bitset】

    无环说明一定有拓扑排序. 我们得到拓扑排序,倒着推.注意压位. #include<bits/stdc++.h> #include<bitset> using namespace ...

  4. 【图论专题】拓扑排序

    拓扑排序 给定一张有向无环图,若一个序列A满足图中的任意一条边(x,y)x都在y的前面呢么序列A就是图的拓扑排序 实际上拓扑排序就是满足所有的边x指向y,x一定在y的前面.这样按照拓扑排序递推,就可以 ...

  5. 0x21.搜索 - 树与图的遍历、拓扑排序

    目录 一.树与图的深度优先遍历及树的一些性质 1.树与图的深度优先遍历 2.时间戳 3.树的DFS序(树链剖分前驱知识) 4.树的深度 5.树的重心与sizesizesize 6.图的连通块划分 二. ...

  6. Acwing 164.可达性统计(Java)

    题目描述: 给定一张 N 个点 M 条边的有向无环图,分别统计从每个点出发能够到达的点的数量. 输入格式 第一行两个整数 N,M,接下来 M 行每行两个整数 x,y,表示从 x 到 y 的一条有向边. ...

  7. 每日一套codeforce集训1119E[贪心],821C[栈模拟],645D[拓扑排序]

    有n种长度的棍子,长度分别为2^0 ,2 ^ 1,-,2 ^ (n-1) ,每种棍子有a[i] 种,问你能组成多少个三角形. 三角形两边之和大于第三边,而2 ^ i + 2 ^ i = 2 ^ (i+ ...

  8. hdu1285 拓扑排序+优先队列

    原题地址 这算是我个人AC的第一个拓扑排序题目吧. 题目解读 给出几组比赛的胜负情况.推断最后的排名.依据题意这就是一个明显的拓扑排序问题了. 注意 假设由于可能的排名有多种情况,这时要保证编号小的在 ...

  9. pku 1691 Painting A Board DFS 抽象建图 + 拓扑排序

    http://poj.org/problem?id=1691 题意: 给定一个大矩形,然后给出n个需要染色的小矩形的左上角的坐标,右下角的坐标以及该矩形要染得颜色,每个颜色对应的一把刷子.问将这些小矩 ...

最新文章

  1. 在2020年到来之前,你应该知道的10大科技趋势预测
  2. 从实际案例聊聊Java应用的GC优化
  3. redis相关知识记录整理
  4. 博客编辑工具ckeditor
  5. java 计时器归零_java - 如何每15秒运行一次计时器并取消并重新启动
  6. 服务器如何识别同一客户端的各种不同的命令_开源项目|如何开发一个高性能的redis cluster proxy?...
  7. js中ajax的异步性
  8. linux matplotlib 中文显示乱码
  9. php 控制 打印机 打印尺寸_打破常规尺寸,得实推出宽幅条码标签单据打印机新品...
  10. 固高GTS控制卡功能介绍2:NewWatch功能
  11. 西门子PLC_s7-200免费学习视频教程
  12. H5页面调起手机打电话功能
  13. Android系统 GPIO状态查询
  14. 中国新鲜杏子行业市场供需与战略研究报告
  15. 怎样有效率地进行外文文献检索?
  16. 怎么把计算机里面的解压到桌面上,电脑桌面怎么加压文件
  17. matlab如何实现动态显示,matlab 坐标图动画,动态显示数据
  18. 博图v16组态wincc_体验博途V16的新玩意WinCC Unified(二)Hello World篇
  19. easyui-textbox
  20. 2021年诺贝尔物理学奖——平衡混沌与秩序的复杂

热门文章

  1. free store VS heap(自由存储区VS堆)
  2. 6. 区别值类型和引用类型。
  3. 将小写金额转换成大写金额[存储过程版]
  4. weblogic部署方式
  5. Mybatis逆向工程(生成实体类)开发指南
  6. AD域控exchange邮箱(四)——获取AD域控中计算机有哪些账号登录过
  7. Linux操作Oracle(1)——Linux下 Weblogic启动关闭方法
  8. powershell自动化操作AD域、Exchange邮箱系列(4)—批量导入邮箱/域账号(文件)
  9. GitHub如何在README.md文件中插入图片
  10. 如何在shell中执行 字符串拼接起来的命令 cmd = ls / 执行方法:$cmd