1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| 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; }
|