拓扑排序(topological-sort)

拓扑排序

模板

cpp 复制代码
queue<int> q;
vector<int> v;
for(int i=1;i<=n;++i)
    if(!in[i]) q.push(i);
while(q.size()){
    int x=q.front();
    q.pop();
    v.pb(x); //拓扑序列
    for(int i=head[x];i;i=ne[i]){
        int y=to[i];
        in[y]--;
        if(!in[y]) q.push(y);
    }
}

1.判断是否成环

并查集判 无向图的环,拓扑排序判 有向图的环。

如果拓扑序列点的数量不等于总点数,那么有环。

2.在遍历树时,数出上头需要当前点几次

cpp 复制代码
queue<int> q;
for(int i=1;i<=n;++i)
    if(!in[i]) q.push(i);
vis[n]=1;
while(q.size()){
    int x=q.front();
    q.pop();
    for(int i=head[x];i;i=ne[i]){
        int y=to[i];
        vis[y]+=vis[x];
        in[y]--;
        if(!in[y]) q.push(y);
    }
}
相关推荐
x_xbx17 小时前
LeetCode:53. 最大子数组和
算法·leetcode·职场和发展
菜菜小狗的学习笔记17 小时前
剑指Offer算法题(一)数组与矩阵
线性代数·算法·矩阵
仰泳的熊猫17 小时前
题目2269:蓝桥杯2016年第七届真题-冰雹数
开发语言·数据结构·c++·算法·蓝桥杯
Yungoal17 小时前
C++流类继承关系
开发语言·c++
冷徹 .17 小时前
2023ICPC山东省赛
c++·算法
Sakinol#17 小时前
Leetcode Hot 100 ——回溯part01
算法·leetcode
乌萨奇也要立志学C++17 小时前
【Linux】线程池(二)C++ 手写线程池全流程:从核心设计到线程安全、死锁深度解析
linux·c++
feng_you_ying_li17 小时前
list的介绍与底层实现
数据结构·c++·list
星轨初途17 小时前
C++入门基础指南
开发语言·c++·经验分享·redis
罗湖老棍子17 小时前
【例 3】校门外的树(信息学奥赛一本通- P1537)
数据结构·算法·树状数组