Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <stack>
- using namespace std;
- vector<int> used;
- vector< vector<int> > G;
- stack<int> ans;
- int n, m;
- void dfs(int start) {
- used[start] = 1;
- for(int i = 0; i < n; i++) {
- if(used[i] == 0 && G[start][i] == 1) {
- dfs(i);
- }
- }
- used[start] = 2;
- ans.push(start);
- }
- int main() {
- cin >> n >> m;
- G = vector< vector<int> >(n, vector<int>(n, 0));
- for(int i = 0; i < m; i++) {
- int a, b;
- cin >> a >> b;
- G[a - 1][b - 1] = 1;
- }
- used = vector<int>(n, 0);
- vector<int> a;
- for(int i = 0; i < n; i++) {
- int sum = 0;
- for(int j = 0; j < m; j++) {
- sum += G[j][i];
- }
- if(sum == 0) {
- a.push_back(i);
- }
- }
- for(int i = 0; i < a.size(); i++) {
- dfs(a[i]);
- }
- while(!ans.empty()) {
- cout << ans.top() + 1 << ' ';
- ans.pop();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement