Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <vector>
- using namespace std;
- struct result
- {
- int time;
- int node;
- };
- bool compare(result a, result b)
- {
- return a.time > b.time;
- }
- int start[1000];
- int finish[1000];
- int time;
- int visited[1000];
- vector<int> v[100000];
- vector<result> r;
- int n, m;
- void DFS_visit(int source)
- {
- start[source] = time++;
- visited[source] = 1;
- for (int i = 0; i < v[source].size(); i++)
- {
- int a = v[source][i];
- if (visited[a] != 1)
- {
- DFS_visit(a);
- }
- }
- finish[source] = time++;
- }
- void DFS()
- {
- for (int i = 1; i <= n; i++)
- {
- if (visited[i] != 1)
- {
- DFS_visit(i);
- }
- }
- }
- int main()
- {
- while (cin >> n >> m)
- {
- if (n == 0 && m == 0)break;
- time = 0;
- for (int i = 0; i < 1000; i++)
- {
- visited[i] = start[i] = finish[i] = 0;
- }
- int a, b;
- for (int i = 0; i < m; i++)
- {
- cin >> a >> b;
- v[a].push_back(b);
- }
- DFS();
- result k;
- for (int i = 1; i <= n; i++)
- {
- k.time = finish[i];
- k.node = i;
- r.push_back(k);
- }
- sort(r.begin(), r.end(), compare);
- for (int i = 0; i < r.size() - 1; i++)
- {
- cout << r[i].node << " ";
- }
- cout << r[n - 1].node << endl;
- r.clear();
- for (int i = 0; i < 100000; i++)
- {
- v[i].clear();
- }
- }
- return 0;
- }
- /*
- 5 4
- 1 2
- 2 3
- 1 3
- 1 5
- 0 0
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement