首页 > 其他分享 >搜索与图论(五)拓扑排序---以题为例

搜索与图论(五)拓扑排序---以题为例

时间:2024-03-31 22:12:27浏览次数:29  
标签:输出 图论 有向图 idx int 拓扑 --- 序列

给定一个 n 个点 m 条边的有向图,点的编号是 1 到 n,图中可能存在重边和自环。

请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出 −1。

若一个由图中所有点构成的序列 A 满足:对于图中的每条边 (x,y),x 在 A 中都出现在 y 之前,则称 A 是该图的一个拓扑序列。

输入格式

第一行包含两个整数 n 和 m。

接下来 m 行,每行包含两个整数 x 和 y,表示存在一条从点 x 到点 y 的有向边 (x,y)。

输出格式

共一行,如果存在拓扑序列,则输出任意一个合法的拓扑序列即可。

否则输出 −1。

数据范围

1≤n,m≤105

输入样例:

3 3
1 2
2 3
1 3

输出样例:

1 2 3
#include<iostream>
#include<cstring>
using namespace std;
const int N =1000010;
int n,m;
int h[N],e[N],ne[N],idx;
int d[N];
int q[N];

void add(int a,int b){
    e[idx]=b;
    ne[idx]=h[a];
    h[a]=idx++;
}

bool topsort(){
    int hh=0,tt=-1;
    for(int i=1;i<=n;i++)
        if(!d[i])
            q[++tt]=i;
    
    while(hh<=tt){
        int t =q[hh++];
        for(int i =h[t];i!=-1;i=ne[i]){
            int j=e[i];
            if(--d[j]==0){
                q[++tt]=j;
            }
        }
    }
    return tt==n-1;
}

int main(){
    cin>>n>>m;
    memset(h,-1,sizeof h);
    for(int i=0;i<m;i++){
        int a,b;
        cin>>a>>b;
        add(a,b);
        d[b]++;
    }
    if(!topsort()) puts("-1");
    else {
        for(int i =0;i<n;i++) cout<<q[i]<<" ";
        puts("");
    }
    return 0;
}

 

标签:输出,图论,有向图,idx,int,拓扑,---,序列
From: https://www.cnblogs.com/Ghost-Knight/p/18107353

相关文章

  • http内置库(1)-HTTPStatus
    http内置库文档:https://docs.python.org/zh-cn/3.10/library/http.htmlhttp是一个包,它收集了多个用于处理超文本传输协议的模块:http.client是一个底层的HTTP协议客户端;对于高层级的URL访问请使用urllib.requesthttp.server包含基于socketserver的基本HTTP服......
  • vue-路由详解
    路由vue-router1.对路由的理解:vue的一个插件库,专门用来实现SPA应用2.对SPA应用的理解:1.单页web应用2.整个应用只有一个完整的页面(index.html)3.点击页面中的导航链接不会刷新页面,只做页面的局部更新4.数据需要通过ajax请求获取3.什么是路由?1.......
  • 【信道估计】大规模MIMO-OFDM稀疏多径QPSK调解制的DL信道估计附matlab代码
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • CSS继承性-行高的继承性
    CSS中行高的继承性是CSS继承特性中的一个具体表现。简单来说,如果一个元素(父元素)设置了行高(line-height),那么它的子元素会继承这个行高值,除非子元素本身也设置了行高。行高的继承性有助于保持文本在父子元素之间的一致性和可读性。例如,如果父元素的行高设置为1.5(这通常是相对于......
  • Python与供应链-2预测误差及指数平滑需求预测模型
    主要介绍预测误差和指数平滑模型的相关理论,然后再通过Python的statsmodels封装的指数平滑函数预测需求。1预测误差预测误差是指预测结果与预测对象发展变化的真实结果之间的差距。这种误差分为绝对误差和相对误差。绝对误差是预测值与实际观测值的绝对差距,而相对误差则是这种......
  • 某xx冰城app-sha256withrsa分析
    现在的天气是真的越来越暖和,太容易口渴了,索性拿出裤兜的几块钱买杯凉饮喝喝吧!那不说来就来了。今天分析的app是6Jyc6Zuq5Yaw5Z+OYXBwLXYxLjIuMA==,安装包百度一下即可。1.先抓个包没错,今天要分析的是这个"sign"字段,"t"是一个时间戳,所以每次请求加密肯定都是变化的。2.......
  • PHP代码审计——Day1-Wish List
    前言:发现红日安全代码审计小组写了关于php代码审计demo的系列文章,于是跟着一起学习。参考:[红日安全]代码审计Day1-in_array函数缺陷RIPS-PHP-SECURITY-CALENDAR-2017学习记录漏洞解析classChallenge{constUPLOAD_DIRECTORY='./solutions/';private$file;priv......
  • 2024-03-31
    2024-03-31讲课提到的很有道理啊,确实很常见在窗口的星星里面就用到了还有一个小技巧求区间0的个数不好做有的时候满足所有数非负转化成求区间最小值是不是0和区间最小值的个数就行了这两天讲课的时候还经常提到·修改和查询的复杂度不平衡的时候,把他平衡会更优秀......
  • 视野修炼-技术周刊第79期 | 人很重要,软件只是乐趣
    欢迎来到第79期的【视野修炼-技术周刊】,下面是本期的精选内容简介......
  • element-ui input 组件源码分享
    今日简单分享input组件的实现原理,主要从以下五个方面来分享:1、input组件的页面结构2、input组件的属性3、input组件的slot4、input组件的事件5、input组件的方法一、input组件的页面结构。二、input组件的属性。2.1type属性,类型string,默认text。2.1.1......