拓扑排序(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);
    }
}
相关推荐
BlockWay37 分钟前
西甲赛程搬进平台:WEEX以竞猜开启区域合作落地
大数据·人工智能·算法·安全
漫雾_2 小时前
两个强制结束进程的方法
c++·驱动开发·安全
HAPPY酷2 小时前
C++ 多线程实战三板斧
java·开发语言·c++·技术美术
im_AMBER2 小时前
Leetcode 121 翻转二叉树 | 二叉树中的最大路径和
数据结构·学习·算法·leetcode
fpcc2 小时前
并行编程实战——CUDA编程的Tile
c++·cuda
mit6.8243 小时前
二分+贪心
算法
programhelp_3 小时前
特斯拉 MLE 超详细面经 + 避坑
数据结构·人工智能·算法·面试·职场和发展
越甲八千4 小时前
深入了解迭代器erase()之后的失效逻辑
算法
躺柒4 小时前
读人工智能全球格局:未来趋势与中国位势06人类的未来(下)
大数据·人工智能·算法·ai·智能
_风华ts4 小时前
C++ 函数封装与绑定
c++·函数指针·函数封装