Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- #include <vector>
- #include <set>
- #include <map>
- #include <string>
- #include <algorithm>
- #include <cmath>
- using namespace std;
- bool fl = false;
- void dfs(int &v, vector<vector<int>> &a, vector<int> &used, vector<int> &ans)
- {
- used[v] = 1;
- for (int i = 0; i < a[v].size(); ++i)
- if (used[a[v][i]] == 0)
- dfs(a[v][i], a, used, ans);
- else
- if(used[a[v][i]] == 1)
- fl = true;
- used[v] = 2;
- ans.push_back(v);
- }
- void main()
- {
- #ifdef _DEBUG
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif
- int n, k;
- cin >> n >> k;
- vector<vector<int>> a(n);
- vector<int> b(k);
- vector<int> used(n);
- vector<int> ans;
- for (int i = 0; i < k; ++i)
- {
- cin >> b[i];
- b[i]--;
- }
- for (int i = 0; i < n; ++i)
- {
- int m;
- cin >> m;
- for (int j = 0; j < m; ++j)
- {
- int ch;
- cin >> ch;
- ch--;
- a[i].push_back(ch);
- //a[ch].push_back(i);
- }
- }
- for (int i = 0; i < k; ++i)
- {
- if(used[b[i]] == 0)
- dfs(b[i], a, used, ans);
- }
- if (fl)
- {
- cout << -1;
- return;
- }
- cout << ans.size() << endl;
- for (int i = 0; i < ans.size(); ++i)
- cout << ++ans[i] << " ";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement