拓扑排序(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);
    }
}
相关推荐
云深处@2 分钟前
【C++11】特殊类&&单例模式
开发语言·c++
小程故事多_802 分钟前
RAG,基于字号频率的内容切分算法,非常强
人工智能·算法·aigc
ADDDDDD_Trouvaille5 分钟前
2026.2.15——OJ83-85题
c++·算法
烟花落o9 分钟前
算法的时间复杂度和空间复杂度
开发语言·数据结构·笔记·算法
Ronaldinho Gaúch37 分钟前
算法题中的日期问题
开发语言·c++·算法
Chary20161 小时前
Opencascade VTK 集成服务 VIS
算法
楠秋9201 小时前
代码随想录算法训练营第三十一天|56. 合并区间 、 738.单调递增的数字、968.监控二叉树
数据结构·算法·leetcode·贪心算法
zenpluck2 小时前
RTAB-Map学习记录(1)--论文阅读
c++·论文阅读·学习·机器人
MadPrinter2 小时前
Python 异步爬虫实战:FindQC 商品数据爬取系统完整教程
爬虫·python·算法·自动化
郝学胜-神的一滴2 小时前
Effective Modern C++ 条款36:如果有异步的必要请指定std::launch::async
开发语言·数据结构·c++·算法