Submission #1345179

#TimeUsernameProblemLanguageResultExecution timeMemory
1345179nagorn_phRoad Closures (APIO21_roads)C++20
0 / 100
25 ms12188 KiB
#include "roads.h"
#include <bits/stdc++.h>
#define int long long
#define emb emplace_back
#define pii pair <int32_t, int32_t>
#define tiii tuple <int32_t, int32_t, int32_t>
#define all(a) a.begin(), a.end()

using namespace std;

const int N = 1e5 + 5;
const int inf = 1e18;

int32_t n;
vector <pii> adj[N];

std::vector<long long> minimum_closure_costs(int32_t N, std::vector<int32_t> u,
                                             std::vector<int32_t> v,
                                             std::vector<int32_t> w) {
    n = N;
    vector <int> l(n + 1), r(n + 1);
    for (int32_t i = 0; i < n - 1; i++) {
        u[i]++, v[i]++;
        adj[u[i]].emb(w[i], v[i]);
        adj[v[i]].emb(w[i], u[i]);
        r[min(u[i], v[i])] = w[i];
        l[max(u[i], v[i])] = w[i];
    }
    int dp[n + 1][2]; 
    for (int i = 1; i <= n; i++) dp[i][0] = dp[i][1] = inf;
    dp[1][1] = r[1];
    for (int i = 2; i <= n; i++) {
        dp[i][0] = dp[i - 1][1];
        if (i < n) dp[i][1] = min(dp[i - 1][0], dp[i - 1][1]) + r[i];
    }
    // for (int i = 1; i <= n; i++) {
    //     cout << i << " : " << dp[i][0] << ", " << dp[i][1] << "\n";
    // }
    vector <int> ans(n);
    ans[0] = accumulate(all(w), 0ll);
    ans[1] = min(dp[n - 1][0], dp[n - 1][1]);
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...