Submission #1060542

# Submission time Handle Problem Language Result Execution time Memory
1060542 2024-08-15T17:06:19 Z n1k Closing Time (IOI23_closing) C++17
8 / 100
85 ms 40244 KB
#include "closing.h"
#include <bits/stdc++.h>

using namespace std;

using ll = long long;

int max_score(int N, int X, int Y, long long K, vector<int> U, vector<int> V, vector<int> W){
    vector<vector<array<int, 2>>> g(N);
    vector c(2, vector<ll>(N));
    vector<int> par(N);

    for(int i=0; i<N-1; i++){
        g[U[i]].push_back({V[i], W[i]});
        g[V[i]].push_back({U[i], W[i]});
    }
    function<void(int, int, vector<ll>&)> dfs = [&](int u, int p, vector<ll> &c){
        par[u] = p;
        for(auto [v, cost]:g[u]){
            if(v==p){
                continue;
            }
            c[v]+=c[u] + cost;
            dfs(v, u, c);
        }
    };

    dfs(X, -1, c[0]);
    dfs(Y, -1, c[1]);

    auto get = [&](ll K){
        int ans = 0;
        vector vis(2, vector<int>(N));
        priority_queue<array<ll, 3>, vector<array<ll, 3>>, greater<array<ll, 3>>> pq;
        // (cost, node, start x or y)
        pq.push({0, X, 0});
        pq.push({0, Y, 1});
        while(pq.size()){
            auto [cost, u, start] = pq.top();
            pq.pop();
            if(vis[start][u]){
                continue;
            }
            vis[start][u]=1;
            if(K<cost){
                break;
            }
            //cerr << u << " " << cost << " " << start << endl;
            ans++;
            K-=cost;
            for(auto [v, _]:g[u]){
                pq.push({c[start][v], v, start});
            }
        }
        return ans;
    };
    auto get2 = [&](ll K){
        int ans = 0;
        vector vis(2, vector<int>(N));
        priority_queue<array<ll, 3>, vector<array<ll, 3>>, greater<array<ll, 3>>> pq;

        for(int u=X; ; u=par[u]){
            if(min(c[0][u], c[1][u])>K){
                return ans;
            }
            ans++;
            if(c[0][u]<c[1][u]){
                K-=c[0][u];
                vis[0][u]=1;
            }else{
                K-=c[1][u];
                vis[1][u]=1;
            }
            if(u==Y) break;
        }

        for(int u=X; u!=Y; u=par[u]){
            for(int start=0; start<2; start++){
                for(auto [v, _]:g[u]){
                    if(vis[start^1][v] and c[start^1][v] <= c[start][v]){
                        pq.push({c[start][v] - c[start^1][v], v, start});
                    }else{
                        pq.push({c[start][v], v, start});
                    }
                    if(vis[start^1][v] and c[start^1][u] >= c[start][u]){
                        pq.push({c[start^1][u] - c[start][u], u, start^1});
                    }
                }
            }
        }
        cerr << K << endl;
        while(pq.size()){
            auto [cost, u, start] = pq.top();
            pq.pop();
            if(vis[start][u]){
                continue;
            }
            vis[start][u]=1;
            if(K<cost){
                break;
            }
            cerr << u << " " << cost << " " << start << " " << K <<  endl;
            ans++;
            K-=cost;
            for(auto [v, _]:g[u]){
                if(vis[start^1][v] and c[start^1][v] <= c[start][v]){
                    pq.push({c[start][v] - c[start^1][v], v, start});
                }else{
                    pq.push({c[start][v], v, start});
                }
                if(vis[start^1][v] and c[start^1][u] >= c[start][u]){
                    pq.push({c[start^1][u] - c[start][u], u, start^1});
                }
            }
        }
        return ans;
    };
    return max(get(K), get2(K));
}
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 348 KB 1st lines differ - on the 1st token, expected: '6', found: '5'
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 79 ms 33212 KB Output is correct
2 Correct 85 ms 40244 KB Output is correct
3 Correct 50 ms 5468 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Incorrect 1 ms 348 KB 1st lines differ - on the 1st token, expected: '30', found: '24'
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Incorrect 1 ms 348 KB 1st lines differ - on the 1st token, expected: '30', found: '24'
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Incorrect 1 ms 348 KB 1st lines differ - on the 1st token, expected: '30', found: '24'
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 348 KB 1st lines differ - on the 1st token, expected: '6', found: '5'
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 348 KB 1st lines differ - on the 1st token, expected: '6', found: '5'
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 348 KB 1st lines differ - on the 1st token, expected: '6', found: '5'
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 348 KB 1st lines differ - on the 1st token, expected: '6', found: '5'
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 348 KB 1st lines differ - on the 1st token, expected: '6', found: '5'
2 Halted 0 ms 0 KB -