zoukankan      html  css  js  c++  java
  • 拓扑排序(输出字典序最小的)

    题意: 拓扑排序,输出字典序最小的。

    思路:优先队列优化。

    #include <iostream>
    #include <vector>
    #include <queue>
    #include<string.h>
    using namespace std;
    int n, m;
    const int N=1e5+10;
    vector<int> out[N];      //入度记录
    int in[N];    //出度记录
    vector<int>ret;
    priority_queue<int,vector<int>,greater<int> > q;
    int topsort(){
        while (!q.empty()){
            int idx = q.top();
            q.pop();
            ret.push_back(idx);
            //抹掉这个点的所有出度边 与入度计数
            int _size=out[idx].size();
            for (int i=0; i<_size; i++){
                int e=out[idx][i];
                in[e]--; //该点入度减1
                if (in[e] == 0){
                    q.push(e);
                }
            }
        }
    }
    int main()
    {
        while(cin >> n >> m){
            for (int i = 0; i < m; i++){
                int start;
                int end;
                cin >> start >> end;
                in[end]++;
                out[start].push_back(end);
            }
            for (int i = 1; i <= n; i++)
            {
                //找到第一个入度为0的点
                if (in[i] == 0)
                {
                    q.push(i);
    
                }
            }
            topsort();
            int _size=ret.size();
            for(int i=0; i<_size-1; i++)
                cout<<ret[i]<<" ";
            cout<<ret[_size-1]<<endl;
            ret.clear();
            for(int i=1; i<=n; i++){
                out[i].clear();
            }
            memset(in,0,sizeof in);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    robot framework 初始化清除
    python获取命令行参数
    行业基金
    Ubuntu关闭开机自启项
    ubuntu18.04安装adb
    JavaScript
    centos关闭开机自启项
    CSDN值得学习的专栏
    ubuntu和centos操作命令对比
    linux解压文件命令
  • 原文地址:https://www.cnblogs.com/sszywq/p/13893041.html
Copyright © 2011-2022 走看看