整理日期按学习顺序编排,不代表原始发表时间。实际整理于 2026-10-23。
难度为阅读建议,可从 ACM 学习索引 按阶段阅读。
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; }
|