Submission #1153127

#TimeUsernameProblemLanguageResultExecution timeMemory
1153127TroySer사이버랜드 (APIO23_cyberland)C++20
0 / 100
965 ms2162688 KiB
#include <bits/stdc++.h>
#include "cyberland.h"
#include <vector>

using namespace std;
using ll = long long;

const ll INF = 1e18;

vector<vector<ll> > adjList;
vector<vector<ll> > weightMat;

vector<vector<double> > memo;
vector<vector<bool> > visited;

double DP(ll currentNode, ll numSpecialsLeft, ll N, ll H) {

    // cout << currentNode << " " << numSpecialsLeft << endl;
    
    if (numSpecialsLeft < 0) {
        return (double)INF;
    }

    if (currentNode == H) {
        return 0.0;
    }

    if (visited[currentNode][numSpecialsLeft]) {
        return memo[currentNode][numSpecialsLeft];
    }

    visited[currentNode][numSpecialsLeft] = true;

    double minPossible = (double)INF;
    for (ll v: adjList[currentNode]) { // currentNode -> v
        minPossible = min(minPossible, DP(v, numSpecialsLeft, N, H) + (double)weightMat[currentNode][v]);
    }

    return memo[currentNode][numSpecialsLeft] = minPossible;

}

double solve(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr) {

    adjList.clear();
    weightMat.clear();

    adjList.resize(N);
    weightMat.resize(N, vector<ll>(N, INF));

    for (ll i = 0; i < M; i++) {
        adjList[x[i]].push_back(y[i]);
        adjList[y[i]].push_back(x[i]);
        weightMat[x[i]][y[i]] = c[i];
        weightMat[y[i]][x[i]] = c[i];
    }

    visited.clear();
    memo.clear();
    visited.resize(N, vector<bool>(N, false));
    memo.resize(N, vector<double>(K + 1, INF));

    double response = DP(0, K, N, H);

    if (response >= INF) {
        return -1.0;
    } else {
        return response;
    }

}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...