首页 > 其他分享 >拓扑排序

拓扑排序

时间:2023-08-04 16:17:47浏览次数:38  
标签:int 拓扑 vector rudu 排序 1001

拓扑排序

#include<bits/stdc++.h>
using namespace std;
vector<int> g[1001];
priority_queue<int,vector<int>,greater<int> > q;
int rudu[1001];
vector<int> ans;
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int x,y;
		cin>>x>>y;
		g[x].push_back(y);
		rudu[y]++;
	}
	for(int i=1;i<=n;i++){
		if(rudu[i]==0){
			q.push(i);
		}
	}
	while(!q.empty()){
		int f=q.top();
		q.pop();
		ans.push_back(f);
		for(int i=0;i<g[f].size();i++){
			int to=g[f][i];
			rudu[to]--;
			if(rudu[to]==0){
				q.push(to);
			}
		}
	}
	if(ans.size()!=n){
		cout<<-1<<endl;
		return 0;
	}
	for(int i=0;i<n;i++){
		cout<<ans[i]<<" ";
	}
	return 0;
}

标签:int,拓扑,vector,rudu,排序,1001
From: https://www.cnblogs.com/huangxirui/p/17606201.html

相关文章

  • 希尔排序的Python实现,并逐行解释代码
    当然,我可以为您提供希尔排序的Python实现,并逐行解释代码。以下是一个示例:defshell_sort(arr):n=len(arr)gap=n//2#初始化间隔whilegap>0:foriinrange(gap,n):temp=arr[i]j=i#对间隔为gap......
  • mp-排序查询
    升序查询:orderByAsc,排序可以按照多个属性排序,当第一个条件相等时按第二个条件做升序查询降序排序:orderByDesc,和升序同理 组合排序:升序+降序使用orderBy方法(为空是否继续排序,是否为升序,排序的字段) 内嵌方法查询利用newconsumer创建抽象类重写方法 使用if循环语句,使用......
  • 【剑指Offer】16、合并两个排序的链表
    【剑指Offer】16、合并两个排序的链表题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路:首先需要判断几个特殊情况,即判断输入的两个指针是否为空。如果第一个链表为空,则直接返回第二个链表;如果第二个链表为空,则直接......
  • 认识o(logn)排序
    mid=(L+R)/2可能会溢出;改成mid=L+(L-R)/2;提升效率,改成mid=L+(R-L)>>1。mid=(L+R)/2可能会溢出;改成mid=L+(L-R)/2;提升效率,改成mid=L+(R-L)>>1。其中:a代表子规模执行次数,b代表子规模大小,d代表除了子规模调用其他的操作的时间复杂度。若logba<d,时间复杂度为O(Nd)......
  • 桶排序和排序总结
    堆排序堆结构就是用数组实现的完全二叉树结构完全二叉树中如果每棵子树的最大值都在顶部就是大根堆反之为小根堆堆结构的heapinsert与heapify操作heapinsert:新进入的元素都要去跟自己的父元素比较,如果大,就交换。时间复杂度和高度一致,O(logN)heapify:取出最大值时,将最后一......
  • 848. 有向图的拓扑序列
    题目给定一个$n$个点$m$条边的有向图,点的编号是$1$到$n$,图中可能存在重边和自环。请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出$−1$。若一个由图中所有点构成的序列$A$满足:对于图中的每条边$(x,y)$,$x$在$A$中都出现在$y$之前,则称$A$是该图的......
  • 【学习】拓扑排序
    拓扑排序学习笔记忘了学没学过了,就当没学过吧推歌:Oliver《D.S.》B站以外好像没有能听的概念拓扑排序的要求:有向无环图(TAG图)。拓扑序列中,一条有向边的起点一定排在它的重点的前面。由此可得拓扑序列求法:每次找到入度为\(0\)的点,把它加入序列中;删除它和由它出发的边,然后重......
  • 算法-18-希尔排序
         ......
  • 算法笔记(二)—— 认识N(logN)的排序算法
    递归行为的时间复杂度估算整个递归过程是一棵多叉树,递归过程相当于利用栈做了一次后序遍历。对于master公式,T(N)表明母问题的规模为N,T(N/b)表明每次子问题的规模,a为调用次数,加号后面表明,除去调用之外,剩余语句的复杂度是多少,算出d。根据上次三个判断公式进行算法时间复杂度计算......
  • 算法-15-归并排序
       ......