Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <set>
- using namespace std;
- bool tf = false;
- int n, m;
- vector <set <int>> arr;
- bool vis[101][101];
- vector <int> answer;
- void dfs(int i, int u) {
- vis[i][u] = true;
- for (auto v : arr[u]) {
- if (vis[i][v] == false) dfs(i, v);
- }
- }
- int main() {
- cin >> n >> m;
- arr.resize(n + 1);
- for (int i = 0; i < m; i++) {
- int a, b;
- cin >> a >> b;
- arr[a].insert(b);
- }
- for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) vis[i][j] = false;
- for (int i = 1; i <= n; i++) dfs(i, i);
- for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) if (vis[i][j] && vis[j][i] && i != j) tf = true;
- if (tf) cout << "No";
- else {
- cout << "Yes" << endl;
- int k = 0;
- vector <bool> written;
- written.resize(n + 1);
- for (int i = 1; i <= n; i++) written[i] = false;
- while (k < n) {
- for (int i = 1; i <= n; i++) if (!written[i] && arr[i].size() == 0) {
- answer.push_back(i);
- written[i] = true;
- for (int j = 1; j <= n; j++) if (arr[j].find(i) != arr[j].end()) arr[j].erase(i);
- k++;
- }
- }
- for (int i = n - 1; i > -1; i--) cout << answer[i] << " ";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement