Submission #47326

#TimeUsernameProblemLanguageResultExecution timeMemory
47326TalantFireworks (APIO16_fireworks)C++17
26 / 100
37 ms10160 KiB
#include <bits/stdc++.h>

#define mk make_pair
#define sc second
#define fr first
#define pb emplace_back
#define all(s) s.begin(), s.end()
#define sz(s) ( (int)s.size() )
#define int long long

using namespace std;

const int inf = (int)1e18 + 7;
const int N = (int)2e5 + 7;

int n,m;
int x,w;
int dp[302][302];
int ans = inf;
int sum,sm;

vector <int> vec;
vector <pair<int,int> > g[N];

void dfs (int v) {
      for (auto to : g[v]) {
            dfs(to.fr);
            int u = to.fr;
            int w = to.sc;
            for (int i = 0; i <= 300; i ++) {
                  int mn = inf;
                  for (int j = 0; j <= i; j ++) {
                        mn = min(mn,dp[u][j] + abs(i - j - w));
                  }

                  dp[v][i] += mn;
            }
      }
}
main () {
      cin >> n >> m;

      for (int i = 2; i <= n + m; i ++) {
            cin >> x >> w;
            g[x].pb(mk(i,w));
            if (n == 1) {
                  vec.pb(w);
            }
      }
      if (n == 1) {
            for (int j = 0; j < vec.size(); j ++) {
                  sm = 0;
                  for (int i = 0; i < vec.size(); i ++) {
                        sm += abs(vec[i] - vec[j]);
                  }
                  ans = min(ans,sm);
            }
            cout << ans << endl;
            return 0;
      }
      for (int i = n + 1; i <= n + m; i ++)
            for (int j = 1; j <= 300; j ++)
                  dp[i][j] = inf;

      dfs(1);

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

      cout << ans << endl;
}

Compilation message (stderr)

fireworks.cpp:40:7: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
 main () {
       ^
fireworks.cpp: In function 'int main()':
fireworks.cpp:51:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for (int j = 0; j < vec.size(); j ++) {
                             ~~^~~~~~~~~~~~
fireworks.cpp:53:37: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                   for (int i = 0; i < vec.size(); i ++) {
                                   ~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...