码迷,mamicode.com
首页 > 编程语言 > 详细

拓扑排序(输出字典序最小的)

时间:2020-10-29 10:24:45      阅读:26      评论:0      收藏:0      [点我收藏+]

标签:优化   http   back   play   rgba   记录   hid   string   start   

技术图片

 

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

思路:优先队列优化。

技术图片
#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

 

拓扑排序(输出字典序最小的)

标签:优化   http   back   play   rgba   记录   hid   string   start   

原文地址:https://www.cnblogs.com/sszywq/p/13893041.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!