首页 > 其他分享 >拓补排序板子(邻接表实现)

拓补排序板子(邻接表实现)

时间:2025-01-11 19:32:36浏览次数:1  
标签:int 板子 maxn 邻接 include addedge 拓补

#include <iostream>
#include<vector>
using namespace std;
const int maxn=2e5+5;
vector<int>graph[maxn];//邻接表

void addedge(int u,int v)
{
    graph[u].emplace_back(v);
}

int indegree[maxn];//入度表

int main() {
    int n,m;cin>>n>>m;
    for(int i=0;i<m;i++)
    {
        int u,v;cin>>u>>v;
        addedge(u,v);
        indegree[v]++;
    }
    vector<int>qu;int l=0,r=0;
    for(int i=1;i<=n;i++)//节点从1~n
    {
        if(indegree[i]==0)
        {
            qu.emplace_back(i);
            r++;
        }
    }
    int cnt=0;
    while(l<r)
    {
        cnt++;
        int cur=qu[l++];
        for(auto next:graph[cur])
        {
            if(--indegree[next]==0)
            {
                qu.emplace_back(next);
                r++;
            }
        }
    }
    if(cnt==n){
        for(int i=0;i<qu.size()-1;i++)cout<<qu[i]<<' ';//如果存在拓补序(即不带环)
        cout<<qu[qu.size()-1];
    }else{
        cout<<-1;
    }
    return 0;
}

标签:int,板子,maxn,邻接,include,addedge,拓补
From: https://www.cnblogs.com/benscode/p/18666119

相关文章

  • 课程表(拓补排序)
    题目链接:https://leetcode.cn/problems/course-schedule-ii/description/题意:给定n门课程,规定只有学完某一个课程才能继续学下一门课程,让你输出学习顺序。如果成环,则返回空数组思路:拓补排序,入度删除法需要提前准备一个indegree数组用来统计每个节点的入度大小,用数组模拟双端......
  • 单调栈板子
    单调栈用于求解数组每个位置上左边/右边离自己最近的且严格小于/大于自己位置上的数的位置时间复杂度O(N)(每个元素下标进栈一次出栈一次)元素下标能表示的含义比元素本身要多(ps:注意数组长度,过大就要开到全局变量中,否则异常退出orz)方法(求每个位置上离自己最近且严格小于自己......
  • 离散数学——图(无序积、图的表示、邻接点与边、图的分类、子图与补图、结点度数、握手
    文章目录一.无序积二.图的定义三.图的表示1.集合表示法与图形表示法2.邻接矩阵法四.邻接点与邻接边五.图的分类1.按边有无方向分类2.按有无平行边分类3.按边或结点是否含权分类六.子图与补图1.子图2.完全图与补图七.结点度数与握手定理一.无序积图有无向图与有向......
  • 板子
    板子合集头文件//5oiR5piv6YKj57u06I6x54m555qE54uX#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;constexprintN=-1;constexprintinf=20241218;stack<char>t;intmain(){// freopen("neuvill......
  • 图---基于邻接矩阵表示的广度优先遍历
    6-3基于邻接矩阵表示的广度优先遍历实现基于邻接矩阵表示的广度优先遍历。函数接口定义:voidBFS(GraphG,intv);其中G是基于邻接矩阵存储表示的无向图,v表示遍历起点。裁判测试程序样例:#include<stdio.h>#include<stdlib.h>#defineMVNum10     ......
  • 实现基于邻接矩阵表示的深度优先遍历
    6-4实现基于邻接矩阵表示的深度优先遍历函数接口定义:voidDFS(GraphG,intv);其中G是基于邻接矩阵存储表示的无向图,v表示遍历起点。裁判测试程序样例:#include<stdio.h>#include<stdlib.h>#defineMVNum10             intvisite......
  • 快速幂板子
    目录前言板子结语前言        无板子        注:如果不取模,就直接去掉mod,计算式中的mod也去掉longlongpowerfast(){longlonga,b,mod=1000000007,result=1;cin>>a>>b;a=a%mod;while(b>0){if(b%2!=0){r......
  • 用邻接矩阵储存图(附带深度优先遍历DFS)代码解析
    一、数据结构定义代码中定义了结构体 AMGraph 来表示图。其中,Vnum 存储图的顶点数量,Anum 存储边的数量。vexs 是一个指向字符类型的指针,用于存储顶点信息,构成顶点表。arcs 是一个二维指针,指向整型类型,代表邻接矩阵,用于表示顶点之间的连接关系。结构体还包含析构函数 ~A......
  • 初级数据结构——邻接矩阵
    目录前言一、定义与表示二、特点与性质三、操作与应用四、代码模版五、经典例题[1.——LCP07.传递信息](https://leetcode.cn/problems/chuan-di-xin-xi/description/)代码题解[2.——547.省份数量](https://leetcode.cn/problems/number-of-provinces/description/)......
  • 板子
    算法枚举DP,贪心,二分核心:找规律,观察性质套DS:扫描线,线段树,BIT,平衡树?堆,单调栈/队列技巧枚举正难则反,根号分治,前后考虑,拆贡献,转化字符串KMP#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#definepiipair<int,int>#definefifirst#define......