• 【学习】拓扑排序


    前言 

    这个人太菜了都要CSP了才学拓扑排序

    0x10 定义

    给定一张有向无环图,若一个由图中所有点构成的序列A满足边(x,y),x在A中都出现在y之前,则称A是该有向无环图顶点的一个拓扑序。求解A的过程就叫做拓扑排序。

                                                                  ——蓝书·lyd

    0x20 思想+过程

    选择入度为0的点,然后把他连向的点入读减1就行了

    过程:

    1.建立空的序列A

    2.预处理所有点的入度,把入度为0的点入队

    3.取队头x,把x放在A的末尾

    4.遍历从x连出的y点,并把y的入度减1,如果这是y的入度为0,入队

    5.循环3,4直至队列为空,得到A序列

    0x30 用处+题目

    ①判环

    ②处理图上有明显先后顺序要求的题目

    Luogu P1038 神经网络

    Luogu P2661 信息传递

    0x40 code

     1 void topsort(){
     2     queue<int>q;
     3     int x,v;
     4     for(int i=1;i<=n;i++){
     5         if(!r[i])q.push(i);//如果入度为零,入队
     6     }
     7     while(!q.empty()){
     8         x=q.front();q.pop();
     9         a[++tot]=x;
    10         for(int i=head[x];i;i=e[i].nxt){
    11             v=e[i].to;--r[v];
    12             if(!r[v])q.push(v);
    13         }
    14     }
    15 }
    topsort
  • 相关阅读:
    JAVA 8学习笔记-第五章
    JAVA 8学习笔记-第一章
    JAVA 8学习笔记-第二章
    MySQL应用
    Mac给iTerm2终端配色
    masOS支持NTFS读写,无需第三方软件
    macOS Apache配置用于支持Python CGI编程
    Vim
    Thrift
    Netflix Hystrix
  • 原文地址:https://www.cnblogs.com/gengyf/p/11604071.html
Copyright © 2020-2023  润新知