Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define SZ(a) (int)a.size()
- int main() {
- int n, m, s;
- while(cin >> n >> m >> s and (n + m + s)) {
- vector<vector<int>> G(n);
- vector<int> refem(n), num_of_sol(n), g(n);
- for(int i = 0; i < n; i++)
- cin >> num_of_sol[i];
- for(int i = 0; i < n; i++)
- cin >> refem[i];
- while(m--) {
- int u, v;
- cin >> u >> v; u--; v--;
- g[v]++;
- G[u].push_back(v);
- }
- priority_queue<pair<int, int>> pq;
- for(int i = 0; i < n; i++)
- if(!g[i])
- pq.push({-num_of_sol[i], i});
- int qtd = 0;
- while(!pq.empty()) {
- int v = pq.top().second;
- // nao da pra atacar o que tem menos soldados
- if(s <= -pq.top().first)
- break;
- pq.pop();
- qtd++;
- s += refem[v];
- for(int u : G[v])
- if(--g[u] == 0)
- pq.push({-num_of_sol[u], u});
- }
- cout << (qtd == n ? "possivel" : "impossivel") << '\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement