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

2021-03-22 07:25

阅读:452

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

技术图片

 

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

思路:优先队列优化。

技术图片技术图片
#include 
#include 
#include 
#includestring.h>
using namespace std;
int n, m;
const int N=1e5+10;
vectorint> out[N];      //入度记录
int in[N];    //出度记录
vectorint>ret;
priority_queueint,vectorint>,greaterint> > 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 ){
            int start;
            int end;
            cin >> start >> end;
            in[end]++;
            out[start].push_back(end);
        }
        for (int i = 1; i )
        {
            //找到第一个入度为0的点
            if (in[i] == 0)
            {
                q.push(i);

            }
        }
        topsort();
        int _size=ret.size();
        for(int i=0; i<_size->1; i++)
            cout" ";
        cout1]endl;
        ret.clear();
        for(int i=1; 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


评论


亲,登录后才可以留言!