拓扑排序(输出字典序最小的)
标签:优化 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
评论