Submission #840790

# Submission time Handle Problem Language Result Execution time Memory
840790 2023-08-31T17:07:10 Z MohamedAliSaidane Closing Time (IOI23_closing) C++17
9 / 100
191 ms 542456 KB
#include "closing.h"
#include <bits/stdc++.h>
using namespace std;

typedef unsigned long long ll;

#define pb push_back
#define ff first
#define ss second
#define all(x) (x).begin(),(x).end()

const int nax = 205;
const ll INF = 1e18 + 5;

int n, x, y;
ll k;
vector<pair<int,ll>> A[nax];
vector<int> adj[nax];
ll dx[nax], dy[nax];
ll dp[nax][2 * nax][4], memo[nax][2 * nax][4][nax];
int tx[nax], ty[nax];

void dfsx(int u, int par)
{
    for(auto e: A[u])
    {
        if(e.ff == par)
            continue;
        dx[e.ff] = dx[u] + e.ss;
        tx[e.ff] = u;
        dfsx(e.ff, u);
    }
}
void dfsy(int u, int par)
{
    for(auto e: A[u])
    {
        if(e.ff == par)
            continue;
        dy[e.ff] = dy[u] + e.ss;
        ty[e.ff] = u;
        dfsy(e.ff, u);
    }
}
ll f(int u, int ans, int typ);

ll g(int u, int rem, int typ, int idx)
{
    if(rem < 0)
        return INF;
    if(idx == (int)(adj[u].size()))
        return rem > 0? INF: 0ll;
    if(memo[u][rem][typ][idx] != -1)
        return memo[u][rem][typ][idx];
    if(rem == 0)
        return memo[u][rem][typ][idx] = 0ll;
    ll rep = INF;
    for(int j = 0; j <= rem; j++)
    {
        if(typ == 0)
        {
            if(adj[u][idx] == ty[u])
                rep = min(rep, g(u, rem-j, typ, idx + 1) + f(adj[u][idx], j - 1, 2));
            rep = min(rep, g(u, rem - j, typ, idx + 1) + f(adj[u][idx], j, 0));
        }
        else if(typ == 1)
        {
            rep = min(rep, g(u, rem - j, typ, idx + 1) + f(adj[u][idx], j - 1, 1));
            rep = min(rep, g(u, rem - j, typ, idx + 1) + f(adj[u][idx], j, 0));
            if(ty[u] == adj[u][idx])
            {
                rep = min(rep, g(u, rem - j, typ, idx + 1) + f(adj[u][idx], j - 1, 2));
                rep = min(rep, g(u, rem - j, typ, idx + 1) + f(adj[u][idx], j - 2, 3));
            }
        }
        else if(typ == 2)
        {
            rep = min(rep, g(u, rem - j, typ, idx + 1) + f(adj[u][idx], j - 1, 2));
            if(ty[u] != adj[u][idx])
                rep = min(rep, g(u, rem - j, typ, idx + 1) + f(adj[u][idx], j, 0));
        }
        else
        {
            rep = min(rep, g(u, rem - j, typ, idx + 1) + f(adj[u][idx], j - 2, 3));
            rep = min(rep, g(u, rem - j, typ, idx + 1) + f(adj[u][idx], j - 1, 2));
            if(ty[u] != adj[u][idx])
            {
                rep = min(rep, g(u, rem - j, typ, idx + 1) + f(adj[u][idx], j - 1, 1));
                rep = min(rep, g(u, rem - j, typ, idx + 1) + f(adj[u][idx], j, 0));
            }
        }
    }
    return memo[u][rem][typ][idx] = rep;
}
ll f(int u, int ans, int typ)
{
    if(ans < 0)
        return INF;
    if(dp[u][ans][typ] != -1)
        return dp[u][ans][typ];
    ll deplt = typ == 0? 0: typ == 1? dx[u]: typ == 2? dy[u]: max(dx[u], dy[u]);
    if(adj[u].empty())
        return dp[u][ans][typ] = ans > 0? INF: deplt;
    
    return dp[u][ans][typ] = g(u, ans, typ, 0)  + deplt;
}
int max_score(int N, int X, int Y, long long K,
              std::vector<int> U, std::vector<int> V, std::vector<int> W)
{
    n = N, x = X, y = Y, k = K;
    for(int i = 0; i < N; i ++)
    {
        A[i].clear();
        adj[i].clear();

    }
    memset(dp, -1, sizeof(dp));
    memset(memo, -1, sizeof(memo));
    for(int i = 0; i < n - 1; i++)
    {
        A[U[i]].pb({V[i], W[i]});
        A[V[i]].pb({U[i], W[i]});
    }
    tx[x] = x, ty[y] = y;
    dx[x] = dy[y] = 0ll;
    dfsx(x, x);
    dfsy(y, y);
    for(int i = 0; i < n; i++)
    {
        vector<int> v;
        for(auto e: A[i])
            if(e.ff != tx[i])
                adj[i].pb(e.ff);
    }
    for(int ans = 2; ans <= 2 * n; ans++)
    {
        ll cost = INF;
        cost = min(cost, f(x, ans, 0));
        cost = min(cost, f(x, ans - 1, 1));
        cost = min(cost, f(x, ans - 1, 2));
        cost = min(cost, f(x, ans - 2, 3));
        if(cost > k)
            return ans - 1;
    }
    return 2 * n;
}

Compilation message

closing.cpp: In function 'll g(int, int, int, int)':
closing.cpp:53:31: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long unsigned int'} and 'int' [-Wsign-compare]
   53 |     if(memo[u][rem][typ][idx] != -1)
      |        ~~~~~~~~~~~~~~~~~~~~~~~^~~~~
closing.cpp: In function 'll f(int, int, int)':
closing.cpp:99:24: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long unsigned int'} and 'int' [-Wsign-compare]
   99 |     if(dp[u][ans][typ] != -1)
      |        ~~~~~~~~~~~~~~~~^~~~~
# Verdict Execution time Memory Grader output
1 Correct 191 ms 542428 KB Output is correct
# Verdict Execution time Memory Grader output
1 Runtime error 63 ms 5068 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 149 ms 542348 KB Output is correct
2 Correct 148 ms 542344 KB Output is correct
3 Correct 149 ms 542396 KB Output is correct
4 Correct 152 ms 542412 KB Output is correct
5 Correct 148 ms 542316 KB Output is correct
6 Correct 158 ms 542340 KB Output is correct
7 Correct 149 ms 542400 KB Output is correct
8 Correct 160 ms 542428 KB Output is correct
9 Correct 147 ms 542360 KB Output is correct
10 Incorrect 168 ms 542416 KB 1st lines differ - on the 1st token, expected: '44', found: '52'
11 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 149 ms 542348 KB Output is correct
2 Correct 148 ms 542344 KB Output is correct
3 Correct 149 ms 542396 KB Output is correct
4 Correct 152 ms 542412 KB Output is correct
5 Correct 148 ms 542316 KB Output is correct
6 Correct 158 ms 542340 KB Output is correct
7 Correct 149 ms 542400 KB Output is correct
8 Correct 160 ms 542428 KB Output is correct
9 Correct 147 ms 542360 KB Output is correct
10 Incorrect 168 ms 542416 KB 1st lines differ - on the 1st token, expected: '44', found: '52'
11 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 149 ms 542348 KB Output is correct
2 Correct 148 ms 542344 KB Output is correct
3 Correct 149 ms 542396 KB Output is correct
4 Correct 152 ms 542412 KB Output is correct
5 Correct 148 ms 542316 KB Output is correct
6 Correct 158 ms 542340 KB Output is correct
7 Correct 149 ms 542400 KB Output is correct
8 Correct 160 ms 542428 KB Output is correct
9 Correct 147 ms 542360 KB Output is correct
10 Incorrect 168 ms 542416 KB 1st lines differ - on the 1st token, expected: '44', found: '52'
11 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 191 ms 542428 KB Output is correct
2 Correct 149 ms 542348 KB Output is correct
3 Correct 148 ms 542344 KB Output is correct
4 Correct 149 ms 542396 KB Output is correct
5 Correct 152 ms 542412 KB Output is correct
6 Correct 148 ms 542316 KB Output is correct
7 Correct 151 ms 542328 KB Output is correct
8 Correct 155 ms 542352 KB Output is correct
9 Correct 151 ms 542328 KB Output is correct
10 Correct 149 ms 542324 KB Output is correct
11 Correct 151 ms 542304 KB Output is correct
12 Correct 150 ms 542456 KB Output is correct
13 Correct 150 ms 542412 KB Output is correct
14 Correct 151 ms 542408 KB Output is correct
15 Correct 147 ms 542408 KB Output is correct
16 Correct 151 ms 542352 KB Output is correct
17 Correct 147 ms 542388 KB Output is correct
18 Correct 152 ms 542380 KB Output is correct
19 Correct 148 ms 542424 KB Output is correct
20 Correct 148 ms 542416 KB Output is correct
21 Correct 150 ms 542324 KB Output is correct
22 Correct 157 ms 542360 KB Output is correct
23 Correct 149 ms 542416 KB Output is correct
24 Correct 148 ms 542340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 191 ms 542428 KB Output is correct
2 Correct 149 ms 542348 KB Output is correct
3 Correct 148 ms 542344 KB Output is correct
4 Correct 149 ms 542396 KB Output is correct
5 Correct 152 ms 542412 KB Output is correct
6 Correct 148 ms 542316 KB Output is correct
7 Correct 158 ms 542340 KB Output is correct
8 Correct 149 ms 542400 KB Output is correct
9 Correct 160 ms 542428 KB Output is correct
10 Correct 147 ms 542360 KB Output is correct
11 Incorrect 168 ms 542416 KB 1st lines differ - on the 1st token, expected: '44', found: '52'
12 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 191 ms 542428 KB Output is correct
2 Correct 149 ms 542348 KB Output is correct
3 Correct 148 ms 542344 KB Output is correct
4 Correct 149 ms 542396 KB Output is correct
5 Correct 152 ms 542412 KB Output is correct
6 Correct 148 ms 542316 KB Output is correct
7 Correct 158 ms 542340 KB Output is correct
8 Correct 149 ms 542400 KB Output is correct
9 Correct 160 ms 542428 KB Output is correct
10 Correct 147 ms 542360 KB Output is correct
11 Incorrect 168 ms 542416 KB 1st lines differ - on the 1st token, expected: '44', found: '52'
12 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 191 ms 542428 KB Output is correct
2 Correct 149 ms 542348 KB Output is correct
3 Correct 148 ms 542344 KB Output is correct
4 Correct 149 ms 542396 KB Output is correct
5 Correct 152 ms 542412 KB Output is correct
6 Correct 148 ms 542316 KB Output is correct
7 Correct 158 ms 542340 KB Output is correct
8 Correct 149 ms 542400 KB Output is correct
9 Correct 160 ms 542428 KB Output is correct
10 Correct 147 ms 542360 KB Output is correct
11 Incorrect 168 ms 542416 KB 1st lines differ - on the 1st token, expected: '44', found: '52'
12 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 191 ms 542428 KB Output is correct
2 Correct 149 ms 542348 KB Output is correct
3 Correct 148 ms 542344 KB Output is correct
4 Correct 149 ms 542396 KB Output is correct
5 Correct 152 ms 542412 KB Output is correct
6 Correct 148 ms 542316 KB Output is correct
7 Correct 158 ms 542340 KB Output is correct
8 Correct 149 ms 542400 KB Output is correct
9 Correct 160 ms 542428 KB Output is correct
10 Correct 147 ms 542360 KB Output is correct
11 Incorrect 168 ms 542416 KB 1st lines differ - on the 1st token, expected: '44', found: '52'
12 Halted 0 ms 0 KB -