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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| #include<bits/stdc++.h> using namespace std;
map<int, vector<int> >mp; int in[1000]; int out[1000]; vector<int> ans; vector<int> tail;
int n,m;
void topsort() { stack<int>st; for(int i = 1;i<=n;i++) { if(in[i]==0) { st.push(i); ans.push_back(i); } } while(!st.empty()) { int top = st.top(); st.pop(); for(int i = 0;i<mp[top].size();i++) { int tem = mp[top][i]; in[tem]--; if(in[tem]==0) { st.push(tem); ans.push_back(tem); } } } }
int main() { cin >> n >> m; for(int i = 0;i<m;i++) { int u,v; cin >> u >> v; mp[u].push_back(v); in[v]++; } topsort(); for(int i = 0;i<ans.size();i++) { cout << ans[i] <<" "; } return 0; }
|