Submission #1316604

#TimeUsernameProblemLanguageResultExecution timeMemory
1316604LIANetrpeljivost (COI23_netrpeljivost)C++17
0 / 100
0 ms332 KiB
//
// Created by liasa on 29/01/2026.
//
#include <bits/stdc++.h>
using namespace std;
#define ll int
#define v vector
#define lp(i, s, e) for (ll i = s; i < e; ++i)

ll n;
ll adj[2050][2050];

struct node {
  v<ll> ind;
  v<ll> l, r;
  ll mn;
};
node solve(ll s, ll e) {
  if (s == e)
    return {{s}, {0}, {0}, 0};
  ll mid = (s + e) / 2;
  node a = solve(s, mid);
  node b = solve(mid + 1, e);
  ll c1 = 2e18, c2 = 2e18;
  lp(i, 0, a.ind.size()) {
    lp(j, 0, b.ind.size()) {
      c1 = min(c1, a.r[i] + b.l[j] + adj[a.ind[i]][b.ind[j]]);
    }
  }
  lp(i, 0, b.ind.size()) {
    lp(j, 0, a.ind.size()) {
      c2 = min(c2, b.r[i] + a.l[j] + adj[b.ind[i]][a.ind[j]]);
    }
  }

  node res;
  res.mn = a.mn + b.mn + min(c1, c2);
  ll d1 = c1 - min(c1, c2);
  ll d2 = c2 - min(c1, c2);
  lp(i, 0, a.ind.size()) {
    res.ind.push_back(a.ind[i]);
    res.l.push_back(a.l[i] + d1);
    res.r.push_back(a.r[i] + d2);
  }
  lp(i, 0, b.ind.size()) {
    res.ind.push_back(b.ind[i]);
    res.l.push_back(b.l[i] + d2);
    res.r.push_back(b.r[i] + d1);
  }

  return res;
}

int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  lp(i, 0, n) {
    lp(j, 0, n) { cin >> adj[i][j]; }
  }

  if (n == 1) {
    cout << 0;
    return 0;
  }
  cout << solve(0, n - 1).mn;
  return 0;
}

Compilation message (stderr)

Main.cpp: In function 'node solve(int, int)':
Main.cpp:24:11: warning: overflow in conversion from 'double' to 'int' changes value from '2.0e+18' to '2147483647' [-Woverflow]
   24 |   ll c1 = 2e18, c2 = 2e18;
      |           ^~~~
Main.cpp:24:22: warning: overflow in conversion from 'double' to 'int' changes value from '2.0e+18' to '2147483647' [-Woverflow]
   24 |   ll c1 = 2e18, c2 = 2e18;
      |                      ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...