Submission #822290


Source Code Expand

#include <algorithm>
#include <array>
#include <complex>
#include <cassert>
#include <cctype>
#include <climits>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <memory>
#include <queue>
#include <set>
#include <string>
#include <tuple>
#include <vector>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;

inline bool valid(const int x, const int r) { return 0 <= x && x < r; }

void initIOStream() {
  ios::sync_with_stdio(false); // stdinなどと同期しない
  cin.tie(0); // cinの前にflushしない
  cout.setf(ios::fixed);
  cout.precision(10); // 四捨五入して指定桁数表示
}

int N, M;
vector<int> P;
vector<int> L;
vector<int> B;
vector<int> C;
vector<int> minv;
vector<vector<int> > G;
int ans;

int func1(int p){
  //cout << "p = "  <<  p << endl;
  int res = 1 << 28;
  if(!L[p]){
    for(int i = 0, size = G[p].size(); i < size; ++i){
      res = min(res, func1(G[p][i]));
    }
  }else{
    res = L[p];
  }
  minv[p] = res;
  return res;
}

void func2(int p, int q){
  if(L[p]){
    return;
  }
  for(int i = 0, size = G[p].size(); i < size; ++i){
    ans += minv[G[p][i]] - q;
    func2(G[p][i], max(minv[G[p][i]], q));
  }
}

int main() {
  initIOStream();

  cin >> N >> M;
  P.resize(N - 1);
  for(int i = 0; i < N - 1; ++i){
    cin >> P[i];
  }
  B.resize(M);
  C.resize(M);
  for(int i = 0; i < M; ++i){
    cin >> B[i] >> C[i];
  }

  G = vector<vector<int> >(N, vector<int>());
  for(int i = 0, size = P.size(); i < size; ++i){
    G[P[i]].emplace_back(i + 1);
  }

  L = vector<int>(N, 0);
  for(int i = 0; i < M; ++i){
    L[B[i]] = C[i];
  }

  // for(const auto& l : L) cout << l << endl;
  // for(int i = 0; i < G.size(); ++i){
  //   cout << i << ": ";
  //   for(const auto& e : G[i]){
  //     cout << e << " ";
  //   }
  //   cout << endl;
  // }
  // return 0;
  minv.resize(N);
  func1(0);
  // for(const auto& v : minv) cout << v << endl;
  ans = 0;
  func2(0, 0);
  cout << ans << endl;
}

Submission Info

Submission Time
Task B - PackDrop
User lawel3110
Language C++14 (GCC 5.4.1)
Score 300
Code Size 2204 Byte
Status AC
Exec Time 5 ms
Memory 384 KiB

Judge Result

Set Name All
Score / Max Score 300 / 300
Status
AC × 27
Set Name Test Cases
All 00_sample_1, 00_sample_2, 00_sample_3, 10_random_00_n_5, 10_random_01_n_10, 10_random_02_n_2, 10_random_03_n_7, 10_random_04_n_6, 20_random_00_n_64, 20_random_01_n_95, 20_random_02_n_20, 20_random_03_n_33, 20_random_04_n_91, 30_random_00_n_793, 30_random_01_n_611, 30_random_02_n_852, 40_random_00_n_1000, 40_random_01_n_1000, 50_edge_one_00_n_11, 50_edge_one_01_n_101, 50_edge_one_02_n_999, 98_almost_straight_00_n_1000, 98_almost_straight_01_n_1000, 98_almost_straight_02_n_1000, 99_straight_00_n_10, 99_straight_01_n_100, 99_straight_02_n_1000
Case Name Status Exec Time Memory
00_sample_1 AC 4 ms 256 KiB
00_sample_2 AC 4 ms 256 KiB
00_sample_3 AC 4 ms 256 KiB
10_random_00_n_5 AC 4 ms 256 KiB
10_random_01_n_10 AC 4 ms 256 KiB
10_random_02_n_2 AC 4 ms 256 KiB
10_random_03_n_7 AC 4 ms 256 KiB
10_random_04_n_6 AC 4 ms 256 KiB
20_random_00_n_64 AC 5 ms 256 KiB
20_random_01_n_95 AC 4 ms 256 KiB
20_random_02_n_20 AC 4 ms 256 KiB
20_random_03_n_33 AC 4 ms 256 KiB
20_random_04_n_91 AC 4 ms 256 KiB
30_random_00_n_793 AC 4 ms 256 KiB
30_random_01_n_611 AC 4 ms 256 KiB
30_random_02_n_852 AC 4 ms 256 KiB
40_random_00_n_1000 AC 4 ms 256 KiB
40_random_01_n_1000 AC 4 ms 256 KiB
50_edge_one_00_n_11 AC 4 ms 256 KiB
50_edge_one_01_n_101 AC 4 ms 256 KiB
50_edge_one_02_n_999 AC 4 ms 384 KiB
98_almost_straight_00_n_1000 AC 4 ms 384 KiB
98_almost_straight_01_n_1000 AC 4 ms 384 KiB
98_almost_straight_02_n_1000 AC 4 ms 384 KiB
99_straight_00_n_10 AC 4 ms 256 KiB
99_straight_01_n_100 AC 4 ms 256 KiB
99_straight_02_n_1000 AC 4 ms 384 KiB