Advertisement
leanchec

startup.cpp

Aug 23rd, 2023 (edited)
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.68 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int n, a, chefe[100100]={}, salario[100100]={}, insatisfeitos=0;
  5. vector<int> subordinados[100100];
  6. priority_queue<pair<int, int>> maiors[100100];
  7. bool ins[100100]={};
  8.  
  9. void dfs(int cur){
  10.     for(int i=0; i<(int)subordinados[cur].size(); i++){
  11.         int sub=subordinados[cur][i];
  12.         if(sub==cur)continue;
  13.         maiors[cur].push({salario[sub], sub});
  14.         if(salario[sub]>salario[cur]){
  15.             if(!ins[cur]){
  16.                 ins[cur]=1;
  17.                 insatisfeitos++;
  18.             }
  19.         }
  20.         dfs(sub);
  21.     }
  22. }
  23.  
  24. void update(int cur){
  25.     int ms=-1;
  26.     while(!maiors[cur].empty()){
  27.         ms=maiors[cur].top().first;
  28.         int fun=maiors[cur].top().second;
  29.         if(salario[fun]==ms){
  30.             break;
  31.         }
  32.         maiors[cur].pop();
  33.         if(maiors[cur].empty())ms=-1;
  34.     }
  35.  
  36.     if(salario[cur]>=ms){
  37.         if(ins[cur]){
  38.             insatisfeitos--;
  39.             ins[cur]=0;
  40.         }
  41.     }
  42.     else{
  43.         if(!ins[cur]){
  44.             insatisfeitos++;
  45.             ins[cur]=1;
  46.         }
  47.     }
  48. }
  49.  
  50. int main(){
  51.     ios_base::sync_with_stdio(0); cin.tie(0);
  52.     cin >> n;
  53.     for(int i=1; i<=n; i++){
  54.         int c, s;
  55.         cin >> c >> s;
  56.         chefe[i]=c;
  57.         salario[i]=s;
  58.         subordinados[c].push_back(i);
  59.     }
  60.  
  61.     dfs(1);
  62.  
  63.     cin >> a;
  64.     cout << insatisfeitos << '\n';
  65.  
  66.     for(int i=0; i<a; i++){
  67.         int fun, s;
  68.         cin >> fun >> s;
  69.  
  70.         salario[fun]=s;
  71.         maiors[chefe[fun]].push({salario[fun], fun});
  72.         update(chefe[fun]);
  73.         update(fun);
  74.  
  75.         cout << insatisfeitos << '\n';
  76.     }
  77.  
  78.     return 0;
  79. }
  80.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement