Paste will expire never.
- #include <iostream>
- #include <vector>
- using namespace std;
- int n;
- enum TYPE_VERTEX{WHITE,GRAY,BLACK};
- vector<vector<int> > adj;
- vector<TYPE_VERTEX> used;
- void input() {
- cin>>n;
- adj.resize(n);
- used.resize(n,WHITE);
- int next;
- for (int i=0;i<n;i++)
- {
- do
- {
- cin>>next;
- if (next)
- adj[i].push_back(next-1);
- } while (next);
- }
- }
- void dfs(int cur, vector<int> &ans) {
- used[cur] = GRAY;
- for (int i=0; i<adj[cur].size(); i++) {
- int next = adj[cur][i];
- // if (used[next] == GRAY) // Circle
- if (used[next] == WHITE)
- dfs(next,ans);
- }
- used[cur] = BLACK;
- ans.push_back(cur);
- }
- void topological_sort(vector<int> &ans) {
- for (int i=0;i<n;i++) {
- if (used[i] == WHITE) {
- dfs(i,ans);
- }
- }
- }
- void solve() {
- vector<int> ans;
- topological_sort(ans);
- for (int i=n-1;i>=0;i--)
- cout<<ans[i]+1<<' ';
- }
- int main() {
- /*freopen("input.txt","r",stdin);
- freopen("output.txt","w",stdout);*/
- input();
- solve();
- return 0;
- }
Editing is locked.