제출 #654683

#제출 시각아이디문제언어결과실행 시간메모리
654683Sam_a17도로 폐쇄 (APIO21_roads)C++14
12 / 100
53 ms11068 KiB
#include <bits/stdc++.h>
using namespace std;

#define all(x) x.begin(), x.end()

// const long long inf = 1e18;

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

    if(U[i] != i || V[i] != i + 1) {
      flag2 = false;
    }
  }

  if(flag1) {
    sort(all(W));
    vector<long long> answ(N, 0);
    int it = 0;
    for(int i = N - 2; i >= 0; i--) {
      answ[i] = answ[i + 1] + W[it++];
    }

    return answ;
  }

  if(flag2) {
    vector<long long> answ(N, 0);
    for(auto i: W) {
      answ[0] += i;
    }

    vector<vector<long long>> dp(N, vector<long long> (2, 0));
    dp[0][0] = 0;
    dp[0][1] = 0;
  
    for(int i = 1; i < N; i++) {
      dp[i][0] = min(dp[i - 1][1], dp[i - 1][0]) + W[i - 1];
      dp[i][1] = dp[i - 1][0];
    }

    answ[1] = min(dp[N - 1][0], dp[N - 1][1]);
    return answ;
  }

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