Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <set>
- #include <algorithm>
- #define forn(i, n) for(int i = 1; i <= n; ++i)
- #define MAX 100002
- using namespace std;
- vector<set<int>>graph(MAX);
- vector<int>oto;
- int mark[MAX];
- int n, m;
- void dfs(int v) {
- mark[v] = 1;
- for( int x : graph[v]) {
- if (mark[x] == 0)
- dfs(x);
- }
- oto.push_back(v);
- }
- void top_sort() {
- forn(i, n)
- mark[i] = 0;
- oto.clear();
- forn(i, n)
- if(!mark[i])
- dfs(i);
- reverse(oto.begin(), oto.end());
- for(int i: oto) {
- if (graph[i].find(i + 1) == graph[i].end()) {
- cout << "NO" << "\n";
- return;
- }
- }
- for (int i: oto) {
- cout << i << " ";
- return;
- }
- }
- int main() {
- ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
- cin >> n >> m;
- int u, v;
- forn(i, m) {
- cin >> v >> u;
- graph[v].insert(u);
- }
- top_sort();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement