题面链接

https://www.acwing.com/problem/content/850/

思路

对于一个有向图来说,只有无环有向图才有拓扑序列,也可以说一个无环有向图必然有拓扑序列,但是不唯一,我们通过逐步将入度为0的点加进我们的队列里面,然后不断地删边,然后再将下一个度为0的点放进来这样就是我们拓扑排序的一种求解方式了

代码

#include<bits/stdc++.h>
using namespace std;
//----------------自定义部分----------------
#define ll long long
#define mod 1000000007
#define endl "\n"
#define PII pair<int,int>
#define INF 0x3f3f3f3fint dx[4]={0,-1,0,1},dy[4]={-1,0,1,0};ll ksm(ll a,ll b) {ll ans = 1;for(;b;b>>=1LL) {if(b & 1) ans = ans * a % mod;a = a * a % mod;}return ans;
}ll lowbit(ll x){return -x & x;}const int N = 2e6+10;
//----------------自定义部分----------------
int n,m,q,d[N],vis[N];
vector<int> V[N],ans;bool topsort(){queue<int> que;for(int i = 1;i <= n; ++i) {if(!d[i]) que.push(i);}while(!que.empty()){int t = que.front();que.pop();ans.push_back(t);for(int i = 0,l = V[t].size();i < l; ++i){d[V[t][i]]--;if(!d[V[t][i]]) que.push(V[t][i]);}}return ans.size()==n;
}void slove(){if(topsort()){for(int i = 0;i < n; ++i) {cout<<ans[i]<<" \n"[i==n-1];}}else{cout<<"-1"<<endl;}
}int main()
{std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);cin>>n>>m;int u,v;for(int i = 0;i < m; ++i) {cin>>u>>v;V[u].push_back(v);d[v]++;}slove();return 0;
}

AcWing 848. 有向图的拓扑序列(拓扑排序模板)相关推荐

  1. sdut 2140 有向图中是否存在拓扑序列的判断

    Problem Description 给定一个有向图,判断该有向图是否存在一个合法的拓扑序列. 讲解:http://blog.csdn.net/dm_vincent/article/details/ ...

  2. 拓扑排序【Kahn算法(bfs)和dfs求拓扑序列及判环】

    拓扑排序 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,该排序满足这样的条件--对于图中的任意两个结点u和v,若存在一条有 ...

  3. AOV网络、拓扑排序、拓扑序列

    AOV网络 AOV网是有向图的一类应用,在AOV网中,用顶点表示某个有一定规模的"工程"里的不同活动,用图中的边表示各项活动之间的先后顺序关系.一种常见的AOV网实例是大学课程的先 ...

  4. nyoj496巡回赛-拓扑排序-拓扑序列

    巡回赛 时间限制:1000 ms | 难度:3 描述 N 名拳击手进行了 M 场比赛,每场赛均可分出胜负,赛后对 N 名选手进行排序,对于每名拳手,必须满足该拳手所战胜过的对手全部排在其后才能对该排名 ...

  5. 数据结构实验之图论十:判断给定图是否存在合法拓扑序列

    Description 给定一个有向图,判断该有向图是否存在一个合法的拓扑序列. Input 输入包含多组,每组格式如下. 第一行包含两个整数n,m,分别代表该有向图的顶点数和边数.(n<=10 ...

  6. 图结构练习——判断给定图是否存在合法拓扑序列

    题目描述 给定一个有向图,判断该有向图是否存在一个合法的拓扑序列. 输入 输入包含多组,每组格式如下. 第一行包含两个整数n,m,分别代表该有向图的顶点数和边数.(n<=10) 后面m行每行两个 ...

  7. 使用邻接表输出所有拓扑序列(新手必看!通俗易懂!绝对详细!!)

    最近写了个作业,需求是"输出有向无环图的所有拓扑序列".经过一番折腾,终于完成.之后回想起来觉得应该写一份简单易懂的文章,帮助其他人理解. 细细分析一下,可以发现这次任务我们需要解 ...

  8. 图结构练习——判断给定图是否存在合法拓扑序列(topo)

    图结构练习--判断给定图是否存在合法拓扑序列 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description ...

  9. 有向无环图—拓扑序列

    拓扑序列是对有向无环图的节点编号的排序使得满足任意一条边的起点都在终点的前面,例如: 1->2, 3->2 的有向无环图的一个拓扑序列为1,3,2. 任何一个有向无环图都至少有一个拓扑序列 ...

最新文章

  1. 安卓 onTouch OnTouchEvent onChick 顺序
  2. 缓存框架(Java缓存)与框架缓存(介绍mybatis缓存)
  3. 【转】C#基础概念之“什么是反射?”
  4. 【数据结构与算法】之深入解析“等差数列划分II”的求解思路与算法示例
  5. 最优化课程笔记07——约束问题的非线性规划方法(重点:拉格朗日乘子法和惩罚函数法)
  6. Eclipse中,maven工程,pom定义中,版本不匹配时警告提醒---设置方法
  7. 1分钟看懂区块链和分布式网络
  8. RFC8998+BabaSSL---让国密驶向更远的星辰大海
  9. 基于windows的源地址路由
  10. 亿能bms上位机_BMS_CAN 基于USBCAN的BMS上位机软件,VC CSharp C#编程 238万源代码下载- www.pudn.com...
  11. KETTLE使用通配符匹配多个文件输入到一张表中
  12. postgres用户管理及权限控制--赋予某账号只读权限
  13. 服务器和客户端信息的获取
  14. 异构API数据处理实践
  15. 定制属于你的潮流轻链竞品分析
  16. 微型计算机BX和AX区别,微机原理及接口技术-习题答案
  17. Arch Linux 安装Google Earth
  18. ViewPager简单介绍(三) ViewPager+Fragment+TabLayout
  19. 【this,super关键字使用】经典习题
  20. Java基于opencv—矫正图像

热门文章

  1. 深度学习中的样本采样
  2. python 读取一个文件夹下所有图像
  3. 设计模式-------建造者模式(生成器模式)
  4. Excel对话框大全
  5. cf B. Internet Address
  6. struts2 struts.xml 配置(转载)
  7. centos7 jenkins 安装
  8. canvas简单实现动态时钟
  9. 日本研发圆滚滚的球形无人机,被LED屏团团包围
  10. 记录:成功配置 centos + nginx + .net core 2.0