拓扑排序模板

Posted xiaoguapi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拓扑排序模板相关的知识,希望对你有一定的参考价值。

邻接表使用vector实现

void read()
{
    cin >> n >> m;
    for (int i = 1; i <= m; i++)
    {
        cin >> x >> y;
        edge[x].push_back(y);
        in[y]++;
    }
}
void topo_sort()
{
    for (int i = 1; i <= n;i++)
        if (!in[i]) que.push(i);
    while (!que.empty())
    {
        int v = que.front();
        que.pop();
        ans.push_back(v);
        for (int i = 0; i < edge[v].size(); i++)
        {
            if (--in[edge[v][i]] == 0) 
                que.push(edge[v][i]);
        }
    }
}

使用数组实现邻接表

void add_edge(int from, int to)
{
    ver[++tot] = to;
    Next[tot] = head[from];
    head[from] = tot;
    in[to]++;
}

 

以上是关于拓扑排序模板的主要内容,如果未能解决你的问题,请参考以下文章

AtCoderD - Restricted Permutation 拓扑排序模板题:拓扑排序+优先队列

拓扑排序

[模板]tarjan缩点+拓扑排序

拓扑排序 模板

拓扑排序模板

拓扑排序--确定比赛名次(模板题)