# | TimeUTC-0 | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1166660 | dosts | Džumbus (COCI19_dzumbus) | C++20 | 145 ms | 15172 KiB |
#include <bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define vi vector<int>
#define ff first
#define ss second
#define all(x) x.begin(),x.end()
#define sp << " " <<
using namespace std;
const int N = 10001,MOD = 998244353,inf = 1e18;
vi sz(N,0),c(N),d(N);
vi edges[N];
vi dp[N][3];
void dfs(int node,int p) {
sz[node] = 1;
dp[node][0] = {0,inf};
dp[node][1] = {c[node],inf};
dp[node][2] = {inf,inf};
for (auto it : edges[node]) {
if (it == p) continue;
dfs(it,node);
while (dp[node][0].size() < sz[node]+sz[it]+1) dp[node][0].push_back(inf);
while (dp[node][1].size() < sz[node]+sz[it]+1) dp[node][1].push_back(inf);
while (dp[node][2].size() < sz[node]+sz[it]+1) dp[node][2].push_back(inf);
vi dp0 = dp[node][0],dp1 = dp[node][1], dp2 = dp[node][2];
for (int j = 0;j<=sz[node];j++) {
for (int k = 0;k<=sz[it];k++) {
dp[node][0][j+k] = min(dp[node][0][j+k],dp0[j]+min({dp[it][0][k],dp[it][1][k],dp[it][2][k]}));
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |