Submission #1153109

#TimeUsernameProblemLanguageResultExecution timeMemory
1153109TroySerCyberland (APIO23_cyberland)C++20
0 / 100
930 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;

double DP(ll currentNode, ll numSpecialsLeft, ll N) {
    
    if (numSpecialsLeft < 0) {
        return (double)INF;
    }

    if (currentNode == N - 1) {
        return 0.0;
    }

    if (memo[currentNode][numSpecialsLeft] != -1) {
        return memo[currentNode][numSpecialsLeft];
    }

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

    return 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));
    for (ll i = 0; i < N - 1; 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];
    }
    
    memo.clear();
    memo.resize(N, vector<double>(K, INF));
    double response = DP(0, K, N);

    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...