제출 #970953

#제출 시각아이디문제언어결과실행 시간메모리
970953vjudge1Fireworks (APIO16_fireworks)C++14
7 / 100
1 ms472 KiB
#include<bits/stdc++.h>

using namespace std;

#define int long long

const int N=300+10, inf=1e18;
int n, m, f[N], val[N], d[N];
vector<pair<int, int>> g[N];

void pre_dfs(int u){
   for (auto &e:g[u]){
      d[e.first]=d[u]+e.second;
      pre_dfs(e.first);
   }
}

void dfs(int u){
   if (g[u].empty()){
      val[u]=d[u];
      return;
   }
   vector<int> adj;
   for (auto &e:g[u]){
      int v=e.first;
      dfs(v);
      f[u]+=f[v];
      adj.push_back(val[v]);
   }
   sort(adj.begin(), adj.end());
   val[u]=adj[((int)adj.size()-1)/2];
   for (auto &e:g[u]) val[u]=max(val[u], val[e.first]-e.second);
   for (auto &e:g[u]) f[u]+=abs(val[u]-val[e.first]);
}

int32_t main(){
   ios_base::sync_with_stdio(false);
   cin.tie(nullptr);
   cin >> n >> m;
   if (n==1){
      vector<int> v;
      for (int i=2; i<=n+m; ++i){
         int p, c; cin >> p >> c;
         v.push_back(c);
      }
      sort(v.begin(), v.end());
      int val=v[m/2], ans=0;
      for (auto &i:v) ans+=abs(i-val);
      cout << ans << '\n';
      return 0;
   }
   for (int i=2; i<=m+n; ++i){
      int p, c; cin >> p >> c;
      g[p].emplace_back(i, c);
   }
   pre_dfs(1);
   dfs(1);
   cout << f[1] << '\n';
   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...