拓扑排序

一.定义

对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若<u,v> ∈E(G),则u在线性序列中出现在v之前。

通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。

注意:

1)只有有向无环图才存在拓扑序列;

2)对于一个DAG,可能存在多个拓扑序列(此题已经规定了数字的优先级,所以答案唯一);

二.拓扑序列算法思想

(1)从有向图中选取一个没有前驱(即入度为0)的顶点,并输出之;

(2)从有向图中删去此顶点以及所有以它为尾的弧;

重复上述两步,直至图空,或者图不空但找不到无前驱的顶点为止。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include<functional>
#define MAXSIZE 100005
using namespace std;vector<int>G[MAXSIZE];
priority_queue<int ,vector<int>, less<int> > q;
int in[MAXSIZE];int main()
{int T,n,m,a,b;scanf("%d",&T);while(T--){memset(in,0,sizeof(in));vector<int> ans;for(int i=0;i<MAXSIZE;i++)G[i].clear();scanf("%d%d",&n,&m);while(m--){scanf("%d%d",&a,&b);in[a]++;G[b].push_back(a);}for(int i=1;i<=n;i++)if(!in[i]) q.push(i);while(!q.empty()){int u=q.top();ans.push_back(u);q.pop();int len=G[u].size();for(int i=0;i<len;i++){int v=G[u][i];in[v]--;if(!in[v])q.push(v);}}int len=ans.size();for(int i=len-1;i>=0;i--)printf("%d%c",ans[i],i==0?'\n':' ');}return 0;
}

View Code

转载于:https://www.cnblogs.com/alan-W/p/6640008.html

HDU 4857 逃生(拓扑排序)相关推荐

  1. hdu 4857 逃生 拓扑排序

    逃生 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4857 Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只 ...

  2. HDU 4857 逃生 拓扑排序好题 第一次做CLJ出的题

    逃生 Problem Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能排成一行. 现在有n个人,从1标号到n.同时有一些奇怪的约束条件,每个都形如:a必须在b ...

  3. HDU 4857 逃生 (反向拓扑排序 容器实现)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4857 逃生 Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  4. HDU 4857 逃生 【拓扑排序+反向建图+优先队列】

    逃生 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...

  5. 反向拓扑排序 HDU 4857 逃生

    题意:n个结点,m个拓扑关系(a,b)表示a必须排在b前面,在满足m个拓扑关系关系的前提下使得小的结点尽可能的排在前面.也就是说我们现在要从1号结点开始考虑,如果要排1号结点,根据拓扑关系,首先必须排 ...

  6. hdu 5438 Ponds 拓扑排序

    Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...

  7. hdu-----(4857)逃生(拓扑排序)

    逃生 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  8. HDU 2647 Reward (拓扑排序)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2647 题意是给你n点m条有向边,叶子点(出度为0)上的值为888,父亲点为888+1,依次计算... ...

  9. HDU 2647 Reward 拓扑排序

    http://acm.hdu.edu.cn/showproblem.php?pid=2647 题意: 输入N和M代表N个人和M组数据,M组数据中的A和B代表A的工资要比B的工资高,底薪是(888元), ...

最新文章

  1. 用Java实现HTTP断点续传功能(ZT)
  2. 通过javascript改变form提交的action,实现不同的按钮向不同的action提交同一个form的数据
  3. x265与SVT-HEVC现已合二为一
  4. 学习SQL数据查询,这一篇就够了!
  5. Win7系统隐藏文件恢复的方法
  6. python3 正则 去除 html标签、提取正文内容_Python通过正则表达式去除(过滤)HTML标签,提取文字...
  7. 课程作业01的设计思想、程序流程图、源程序代码和结果截图整理
  8. Linux下的SecureCRT破解方法
  9. 团队的英文翻译缩写_(整理)公司部门英文缩写简称大全
  10. 打开组策略 计算机配置,组策略怎么打开? 打开组策略命令与4种方法-电脑教程...
  11. ERA5再分析资料下载
  12. Low-Light Image Enhancement via Edge-Enhanced Multi-Exposure Fusion Network阅读札记
  13. Android加速度传感器测位移,一种校核加速度传感器测位移的方法与流程
  14. 状态空间平均建模——Flyback
  15. cad-pol:正多边形命令学习
  16. 对象引用、可变性和垃圾回收
  17. 2023年第一批拟授予信息系统建设和服务能力贯标企业名单公示
  18. win7自带的便笺桌面工具快捷键.
  19. html代码演讲,index.html
  20. 在GitHub个人资料页面显示个性简历

热门文章

  1. 【HDU - 1839】Delay Constrained Maximum Capacity Path(最短路 + 二分)
  2. 特殊mac地址文档_Mac颜值秒杀Win10?五款神器让Win10化身macOS
  3. mysql本身主从_Mysql主从复制
  4. java gc回收机制种类_JAVA的垃圾回收机制(GC)
  5. mysql 多条记录选择一套_2020-11-09-Mysql(练习题第一套)
  6. linux配置文件为yum,yum的配置文件说明
  7. HTML简单注册页面
  8. linux系统基础与应用,Linux操作系统:基础、原理与应用
  9. php qq接收不了,php imap接收qq邮件的问题
  10. Android实现mp3分析,Android编程实现播放MP3功能示例