제출 #528396

#제출 시각아이디문제언어결과실행 시간메모리
528396cologneRoad Closures (APIO21_roads)C++17
12 / 100
46 ms6808 KiB
#include "roads.h"

#include <algorithm>
#include <vector>
using namespace std;

vector<long long> st1(int N, vector<int> U, vector<int> V, vector<int> W)
{
    vector<long long> answer(N);
    sort(W.rbegin(), W.rend());
    for (int i = N - 1; i >= 1; --i)
        answer[i - 1] = answer[i] + W[i - 1];
    return answer;
}

vector<long long> st2(int N, vector<int> U, vector<int> V, vector<int> W)
{
    long long take = W[0], skip = 0, total = W[0];
    for (int i = 1; i < N - 1; i++)
    {
        long long new_take = min(take, skip) + W[i];
        long long new_skip = take;
        long long new_total = total + W[i];
        take = new_take, skip = new_skip, total = new_total;
    }
    vector<long long> answer(N);
    answer[0] = total;
    answer[1] = min(take, skip);
    return answer;
}

vector<long long> minimum_closure_costs(int N, vector<int> U, vector<int> V, vector<int> W)
{
    auto c1 = [&]()
    {
        for (int i = 0; i < N - 1; i++)
            if (U[i] != 0)
                return false;
        return true;
    };

    auto c2 = [&]()
    {
        for (int i = 0; i < N - 1; i++)
            if (U[i] != i || V[i] != i + 1)
                return false;
        return true;
    };

    if (c1())
        return st1(N, U, V, W);
    if (c2())
        return st2(N, U, V, W);

    return vector<long long>(N);
}
#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...