Submission #841304

# Submission time Handle Problem Language Result Execution time Memory
841304 2023-09-01T13:12:11 Z danikoynov Closing Time (IOI23_closing) C++17
29 / 100
1000 ms 9984 KB
#include "closing.h"
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

const int maxn = 1e3 + 10;

vector < pair < int, ll > > adj[maxn];
ll dist[2][maxn];
int n;

void bfs(int s, ll arr[])
{
    queue < int > q;
    for (int i = 0; i < n; i ++)
        arr[i] = -1;

    arr[s] = 0;
    q.push(s);
    while(!q.empty())
    {
        int v = q.front();
        q.pop();
        for (pair < int, ll > nb : adj[v])
        {
            if (arr[nb.first] == -1)
            {
                arr[nb.first] = arr[v] + nb.second;
                q.push(nb.first);
            }
        }
    }
}
const ll inf = 1e18;

ll value[maxn];
ll dp[maxn][maxn * 2][2][2], sub[maxn], temp[maxn][2][2];
int used[maxn];
/**
N^2*16
*/
void dfs(int v)
{
    ///cout << "dfs " << v << endl;
    sub[v] = 1;
    used[v] = 1;

    for (int j = 0; j <= 2; j ++)
        for (int d = 0; d < 2; d ++)
            for (int z = 0; z < 2; z ++)
                dp[v][j][d][z] = inf;
    dp[v][0][0][0] = 0;
    dp[v][1][1][0] = dist[0][v];
    dp[v][1][0][1] = dist[1][v];
    dp[v][2][1][1] = max(dist[0][v], dist[1][v]);

    for (pair < int, ll > nb : adj[v])
    {
        if (used[nb.first])
            continue;

        dfs(nb.first);
        int u = nb.first;
        for (int i = 0; i <= (sub[u] + sub[v]) * 2; i ++)
            for (int x = 0; x < 2; x ++)
                for (int y = 0; y < 2; y ++)
                    temp[i][x][y]= inf;

        for (int i = 0; i <= sub[v] * 2; i ++)
            for (int j = 0; j <= sub[u] * 2; j ++)
                for (int d = 0; d < 2; d ++)
                    for (int z = 0; z < 2; z ++)
                        for (int x = 0; x <= d; x ++)
                            for (int y = 0; y <= z; y ++)
                            {

                                temp[i + j][d][z] = min(temp[i + j][d][z], dp[v][i][d][z] + dp[u][j][x][y]);
                            }

        for (int i = 0; i <= (sub[v] + sub[u]) * 2; i ++)
            for (int x = 0; x < 2; x ++)
                for (int y = 0; y < 2; y ++)
                    dp[v][i][x][y] = temp[i][x][y];
        sub[v] += sub[u];
    }
}


vector < int > path;
bool get_path(int v, int p, int target)
{
    if (v == target)
    {
        path.push_back(v);
        return true;
    }

    for (pair < int, ll > nb : adj[v])
    {
        if (nb.first == p)
            continue;
        if (get_path(nb.first, v, target))
        {
            path.push_back(v);
            return true;
        }
    }
    return false;
}

ll sum_dp[maxn * 2], tp[maxn * 2];
ll cur_sz = 0;

void unite(int v, int d, int z)
{
    /**cout << "unite " << endl;
    for (int i = 0; i <= sub[v] * 2; i ++)
        cout << dp[v][i][d][z]<< " ";
    cout << endl;*/
    for (int i = 0; i <= (cur_sz + sub[v]) * 2; i ++)
    {
        tp[i] = inf;
    }

    for (int j = 0; j <= 2 * cur_sz; j ++)
        for (int i = 0; i <= 2 * sub[v]; i ++)
        {
            tp[i + j] = min(tp[i + j], sum_dp[j] + dp[v][i][d][z]);
        }

    for (int i = 0; i <= (cur_sz + sub[v]) * 2; i ++)
        sum_dp[i] = tp[i];
    cur_sz += sub[v];
}
int max_score(int N, int X, int Y, long long K,
              vector<int> U, vector<int> V, vector<int> W)
{
    for (int i = 0; i < N; i ++)
    {
        dist[0][i] = dist[1][i] = 0;
        adj[i].clear();
        used[i] = 0;
        value[i] = 0;
    }
    n = N;
    for (int i = 0; i < N - 1; i ++)
    {
        adj[U[i]].push_back({V[i], W[i]});
        adj[V[i]].push_back({U[i], W[i]});
    }

    bfs(X, dist[0]);
    bfs(Y, dist[1]);

    path.clear();
    get_path(Y, -1, X);

    for (int cur : path)
        used[cur] = 1;

    for (int cur : path)
    {
        dfs(cur);
    }
    /**for (int cur : path)
    {
        cout << "step " << cur << endl;
        for (int j = 0; j <= sub[cur] * 2; j ++)
            cout << dp[cur][j][1][0] << " ";
        cout << endl;
    }

    cout << "sub " << sub[2] << endl;
    cout << "-----------------" << endl;*/

 int sz = path.size(), ans = 0;
    for (int i = 0; i < sz; i ++)
    {
         for (int j = sz - 1; j >= 0; j --)
        {

            cur_sz = 0;
            for (int i = 0; i <= N * 2; i ++)
                sum_dp[i] = inf;
            sum_dp[0] = 0;
            for (int id = 0; id < sz; id ++)
            {
                unite(path[id], (id <= i), (id >= j));
            }
            for (int i = 0; i <= N * 2; i ++)
            {
                if (sum_dp[i] <= K)
                    ans = max(ans, i);
            }

            /**cout << "step " << i << " " << j << endl;
            for (int i = 0; i <= N * 2; i ++)
                cout << sum_dp[i] << " ";
            cout << endl;*/

        }
    }

    return ans;

}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Runtime error 45 ms 9984 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 1 ms 436 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 0 ms 596 KB Output is correct
7 Correct 0 ms 468 KB Output is correct
8 Correct 5 ms 468 KB Output is correct
9 Correct 7 ms 468 KB Output is correct
10 Correct 25 ms 564 KB Output is correct
11 Correct 27 ms 540 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 1 ms 436 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 0 ms 596 KB Output is correct
7 Correct 0 ms 468 KB Output is correct
8 Correct 5 ms 468 KB Output is correct
9 Correct 7 ms 468 KB Output is correct
10 Correct 25 ms 564 KB Output is correct
11 Correct 27 ms 540 KB Output is correct
12 Correct 1 ms 980 KB Output is correct
13 Correct 1 ms 980 KB Output is correct
14 Correct 70 ms 740 KB Output is correct
15 Correct 5 ms 852 KB Output is correct
16 Correct 369 ms 756 KB Output is correct
17 Correct 367 ms 756 KB Output is correct
18 Correct 3 ms 340 KB Output is correct
19 Correct 9 ms 7380 KB Output is correct
20 Correct 8 ms 8148 KB Output is correct
21 Execution timed out 1090 ms 2772 KB Time limit exceeded
22 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 1 ms 436 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 0 ms 596 KB Output is correct
7 Correct 0 ms 468 KB Output is correct
8 Correct 5 ms 468 KB Output is correct
9 Correct 7 ms 468 KB Output is correct
10 Correct 25 ms 564 KB Output is correct
11 Correct 27 ms 540 KB Output is correct
12 Correct 1 ms 980 KB Output is correct
13 Correct 1 ms 980 KB Output is correct
14 Correct 70 ms 740 KB Output is correct
15 Correct 5 ms 852 KB Output is correct
16 Correct 369 ms 756 KB Output is correct
17 Correct 367 ms 756 KB Output is correct
18 Correct 3 ms 340 KB Output is correct
19 Correct 9 ms 7380 KB Output is correct
20 Correct 8 ms 8148 KB Output is correct
21 Execution timed out 1090 ms 2772 KB Time limit exceeded
22 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 436 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 0 ms 292 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Correct 0 ms 340 KB Output is correct
12 Correct 0 ms 340 KB Output is correct
13 Correct 0 ms 340 KB Output is correct
14 Correct 0 ms 340 KB Output is correct
15 Correct 0 ms 428 KB Output is correct
16 Correct 0 ms 340 KB Output is correct
17 Correct 0 ms 340 KB Output is correct
18 Correct 0 ms 340 KB Output is correct
19 Correct 1 ms 340 KB Output is correct
20 Correct 0 ms 340 KB Output is correct
21 Correct 0 ms 340 KB Output is correct
22 Correct 0 ms 340 KB Output is correct
23 Correct 0 ms 340 KB Output is correct
24 Correct 0 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 436 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 0 ms 596 KB Output is correct
8 Correct 0 ms 468 KB Output is correct
9 Correct 5 ms 468 KB Output is correct
10 Correct 7 ms 468 KB Output is correct
11 Correct 25 ms 564 KB Output is correct
12 Correct 27 ms 540 KB Output is correct
13 Correct 1 ms 980 KB Output is correct
14 Correct 1 ms 980 KB Output is correct
15 Correct 70 ms 740 KB Output is correct
16 Correct 5 ms 852 KB Output is correct
17 Correct 369 ms 756 KB Output is correct
18 Correct 367 ms 756 KB Output is correct
19 Correct 0 ms 340 KB Output is correct
20 Correct 0 ms 292 KB Output is correct
21 Correct 0 ms 340 KB Output is correct
22 Correct 0 ms 340 KB Output is correct
23 Correct 0 ms 340 KB Output is correct
24 Correct 0 ms 340 KB Output is correct
25 Correct 0 ms 340 KB Output is correct
26 Correct 0 ms 340 KB Output is correct
27 Correct 0 ms 428 KB Output is correct
28 Correct 0 ms 340 KB Output is correct
29 Correct 0 ms 340 KB Output is correct
30 Correct 0 ms 340 KB Output is correct
31 Correct 1 ms 340 KB Output is correct
32 Correct 0 ms 340 KB Output is correct
33 Correct 0 ms 340 KB Output is correct
34 Correct 0 ms 340 KB Output is correct
35 Correct 0 ms 340 KB Output is correct
36 Correct 0 ms 340 KB Output is correct
37 Correct 1 ms 340 KB Output is correct
38 Correct 1 ms 468 KB Output is correct
39 Correct 1 ms 852 KB Output is correct
40 Correct 3 ms 772 KB Output is correct
41 Correct 1 ms 852 KB Output is correct
42 Correct 2 ms 724 KB Output is correct
43 Correct 221 ms 744 KB Output is correct
44 Correct 5 ms 724 KB Output is correct
45 Correct 35 ms 776 KB Output is correct
46 Correct 4 ms 724 KB Output is correct
47 Correct 2 ms 724 KB Output is correct
48 Correct 1 ms 724 KB Output is correct
49 Correct 1 ms 596 KB Output is correct
50 Correct 0 ms 468 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 436 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 0 ms 596 KB Output is correct
8 Correct 0 ms 468 KB Output is correct
9 Correct 5 ms 468 KB Output is correct
10 Correct 7 ms 468 KB Output is correct
11 Correct 25 ms 564 KB Output is correct
12 Correct 27 ms 540 KB Output is correct
13 Correct 1 ms 980 KB Output is correct
14 Correct 1 ms 980 KB Output is correct
15 Correct 70 ms 740 KB Output is correct
16 Correct 5 ms 852 KB Output is correct
17 Correct 369 ms 756 KB Output is correct
18 Correct 367 ms 756 KB Output is correct
19 Correct 3 ms 340 KB Output is correct
20 Correct 9 ms 7380 KB Output is correct
21 Correct 8 ms 8148 KB Output is correct
22 Execution timed out 1090 ms 2772 KB Time limit exceeded
23 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 436 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 0 ms 596 KB Output is correct
8 Correct 0 ms 468 KB Output is correct
9 Correct 5 ms 468 KB Output is correct
10 Correct 7 ms 468 KB Output is correct
11 Correct 25 ms 564 KB Output is correct
12 Correct 27 ms 540 KB Output is correct
13 Correct 1 ms 980 KB Output is correct
14 Correct 1 ms 980 KB Output is correct
15 Correct 70 ms 740 KB Output is correct
16 Correct 5 ms 852 KB Output is correct
17 Correct 369 ms 756 KB Output is correct
18 Correct 367 ms 756 KB Output is correct
19 Correct 3 ms 340 KB Output is correct
20 Correct 9 ms 7380 KB Output is correct
21 Correct 8 ms 8148 KB Output is correct
22 Execution timed out 1090 ms 2772 KB Time limit exceeded
23 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 436 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 0 ms 596 KB Output is correct
8 Correct 0 ms 468 KB Output is correct
9 Correct 5 ms 468 KB Output is correct
10 Correct 7 ms 468 KB Output is correct
11 Correct 25 ms 564 KB Output is correct
12 Correct 27 ms 540 KB Output is correct
13 Correct 1 ms 980 KB Output is correct
14 Correct 1 ms 980 KB Output is correct
15 Correct 70 ms 740 KB Output is correct
16 Correct 5 ms 852 KB Output is correct
17 Correct 369 ms 756 KB Output is correct
18 Correct 367 ms 756 KB Output is correct
19 Correct 3 ms 340 KB Output is correct
20 Correct 9 ms 7380 KB Output is correct
21 Correct 8 ms 8148 KB Output is correct
22 Execution timed out 1090 ms 2772 KB Time limit exceeded
23 Halted 0 ms 0 KB -