제출 #1183175

#제출 시각아이디문제언어결과실행 시간메모리
1183175loomFireworks (APIO16_fireworks)C++20
19 / 100
12 ms1096 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define nl '\n'

const int N = 301;
vector<pair<int,int>> g[N];
int dp[N][N];

void dfs(int v){
   for(auto [ch, w] : g[v]){
      dfs(ch);

      for(int i=0; i<=300; i++){
         int mn = 1e18;
         for(int j=0; j<=i; j++){
            int reqw = i - j;
            mn = min(mn, dp[ch][j] + abs(w - reqw));
         }

         if(mn == 1e18){
            dp[v][i] = 1e18;
            break;
         }
         dp[v][i] += mn;
      }
   }

   if(g[v].size() == 0){
      for(int i=1; i<=300; i++) dp[v][i] = 1e18;
      dp[v][0] = 0;
   }
}

inline void solve(){
   int n, m;
   cin>>n>>m;
   for(int i=2; i<=n+m; i++){
      int p, c;
      cin>>p>>c;
      g[p].push_back({i, c});
   }

   dfs(1);
   int ans = 1e18;
   for(int i=0; i<=300; i++) ans = min(ans, dp[1][i]);
   cout<<ans;
}

signed main(){
   ios_base::sync_with_stdio(0);
   cin.tie(NULL);cout.tie(NULL);

   int t = 1;
   //cin>>t;
   while(t--) solve();

   return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...