AtCoderD - Restricted Permutation 拓扑排序模板题:拓扑排序+优先队列
Posted karshey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AtCoderD - Restricted Permutation 拓扑排序模板题:拓扑排序+优先队列相关的知识,希望对你有一定的参考价值。
关于拓扑排序的知识:
拓扑排序入门(真的很简单)
拓扑排序算法分析(通俗易懂)
看完秒懂。
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define fir(i,a,n) for(int i=a;i<=n;i++)
//======================
const int N=2e5+10;
int n,m;
vector<int>g[N];//我有哪些小弟
int deg[N];//我有几个大哥
priority_queue<int,vector<int>,greater<int>>q;
vector<int>ans;
void bfs()
{
fir(i,1,n)
{
if(!deg[i]) q.push(i);
}
while(q.size())
{
int t=q.top();q.pop();
ans.pb(t);
for(int i=0;i<g[t].size();i++)
{
int tt=g[t][i];
deg[tt]--;
if(!deg[tt]) q.push(tt);
}
}
if(ans.size()==n)
{
for(int i=0;i<ans.size();i++)
{
cout<<ans[i];
if(i!=ans.size()-1) cout<<" ";
}
}
else cout<<-1;
}
int main()
{
cin>>n>>m;
fir(i,1,m)
{
int a,b;scanf("%d%d",&a,&b);//a在b前
g[a].pb(b);
deg[b]++;
}
bfs();
return 0;
}
以上是关于AtCoderD - Restricted Permutation 拓扑排序模板题:拓扑排序+优先队列的主要内容,如果未能解决你的问题,请参考以下文章