const int N = 100010;
int n,m,a,b;
vector<int> e[N], tp;
int din[N];//入度数组
bool toposort(){
queue<int> q;
for(int i = 1; i <= n; i++)
if(din[i]==0) q.push(i);
while(q.size()){
int x=q.front(); q.pop();
tp.push_back(x);
for(auto y : e[x]){
if(--din[y]==0) q.push(y);
}
}
return tp.size() == n;
}
int main(){
cin >> n >> m;
for(int i=0; i<m; i++){
cin >> a >> b;
e[a].push_back(b);
din[b]++;
}
if(!toposort()) puts("-1");
else for(auto x:tp)printf("%d ",x);
return 0;
}
标签:toposort,din,int,拓扑,tp,排序
From: https://www.cnblogs.com/mathiter/p/17889160.html