Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Code Written by : John Nixon
- // Date: 30:11:2022 Time: 16:35:59
- // Copyrights are applicable
- #include <bits/stdc++.h>
- using namespace std;
- #define int long long int
- #define mod 1e9 + 7
- #define F first
- #define S second
- #define pb push_back
- #define si set<int>
- #define vi vector<int>
- #define pii pair<int, int>
- #define vpi vector<pii>
- #define vpp vector<pair<int, pii>>
- #define mii map<int, int>
- #define mpi map<pii, int>
- #define spi set<pii>
- #define endl "\n"
- #define sz(x) ((int)x.size())
- #define all(p) p.begin(), p.end()
- #define double long double
- #define que_max priority_queue<int>
- #define que_min priority_queue<int, vi, greater<int>>
- #define bug(...) __f(#__VA_ARGS__, __VA_ARGS__)
- #define print(a) \
- for (auto x : a) \
- cout << x << " "; \
- cout << endl
- #define print1(a) \
- for (auto x : a) \
- cout << x.F << " " << x.S << endl
- #define print2(a, x, y) \
- for (int i = x; i < y; i++) \
- cout << a[i] << " "; \
- cout << endl
- inline int power(int a, int b)
- {
- int x = 1;
- while (b)
- {
- if (b & 1)
- x *= a;
- a *= a;
- b >>= 1;
- }
- return x;
- }
- template <typename Arg1>
- void __f(const char *name, Arg1 &&arg1) { cout << name << " : " << arg1 << endl; }
- template <typename Arg1, typename... Args>
- void __f(const char *names, Arg1 &&arg1, Args &&...args)
- {
- const char *comma = strchr(names + 1, ',');
- cout.write(names, comma - names) << " : " << arg1 << " | ";
- __f(comma + 1, args...);
- }
- const int N = 200005;
- void dfs(int s, map<int, vi> g, mii &v)
- {
- for (auto i : g[s])
- {
- if (v[i] == 0)
- {
- v[i] = 1;
- dfs(i, g, v);
- }
- }
- }
- vi deleteEdges(int n, int m, int a, int b, vector<vi> edges, vi nodes)
- {
- map<int, vi> g;
- for (int i = 0; i < m; i++)
- {
- g[edges[i][0]].pb(edges[i][1]);
- }
- mii vis;
- for (auto node : nodes)
- {
- vis[node] = 0;
- }
- vis[a] = 1;
- dfs(a, g, vis);
- int cnt = 0;
- vi ans;
- for (auto i: nodes)
- {
- if (vis[i] == 0)
- {
- continue;
- }
- for (int j = 0; j < g[i].size(); j++)
- {
- if (g[i][j] == b)
- {
- ans.pb(i);
- }
- }
- }
- sort(all(ans));
- return ans;
- }
- void solve()
- {
- int n;
- cin >> n;
- vi ids(n);
- for (int i = 0; i < n; i++)
- cin >> ids[i];
- // print(ids);
- int connections;
- cin >> connections;
- vector<vi> adj;
- for (int i = 0; i < connections; i++)
- {
- int u, v;
- cin >> u >> v;
- adj.push_back({u, v});
- }
- int expert, noobie;
- cin >> expert >> noobie;
- vi ans = deleteEdges(n, connections, expert, noobie, adj, ids);
- print(ans);
- }
- int32_t main()
- {
- ios_base::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif
- clock_t z = clock();
- int t = 1;
- // cin >> t;
- while (t--)
- solve();
- cerr << "Run Time : " << ((double)(clock() - z) / CLOCKS_PER_SEC);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement