Advertisement
matheus_monteiro

Ataque Programado

Apr 29th, 2021
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.90 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define SZ(a) (int)a.size()
  4.  
  5. int main() {
  6.     int n, m, s;
  7.     while(cin >> n >> m >> s and (n + m + s)) {
  8.         vector<vector<int>> G(n);
  9.         vector<int> refem(n), num_of_sol(n), g(n);
  10.         for(int i = 0; i < n; i++)
  11.             cin >> num_of_sol[i];
  12.         for(int i = 0; i < n; i++)
  13.             cin >> refem[i];
  14.         while(m--) {
  15.             int u, v;
  16.             cin >> u >> v; u--; v--;
  17.             g[v]++;
  18.             G[u].push_back(v);
  19.         }
  20.         priority_queue<pair<int, int>> pq;
  21.         for(int i = 0; i < n; i++)
  22.             if(!g[i])
  23.                 pq.push({-num_of_sol[i], i});
  24.         int qtd = 0;
  25.         while(!pq.empty()) {
  26.             int v = pq.top().second;
  27.             // nao da pra atacar o que tem menos soldados
  28.             if(s <= -pq.top().first)
  29.                 break;
  30.             pq.pop();
  31.             qtd++;
  32.             s += refem[v];
  33.             for(int u : G[v])
  34.                 if(--g[u] == 0)
  35.                     pq.push({-num_of_sol[u], u});
  36.         }
  37.         cout << (qtd == n ? "possivel" : "impossivel") << '\n';
  38.     }
  39.  
  40.     return 0;
  41. }
  42.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement