Submission #942933

#TimeUsernameProblemLanguageResultExecution timeMemory
942933kunzaZa183사이버랜드 (APIO23_cyberland)C++17
68 / 100
3083 ms51876 KiB
#include "cyberland.h" #include <bits/stdc++.h> using namespace std; vector<vector<double>> dp; vector<vector<pair<int, int>>> adjlist; vector<int> type; int maxk; int target; void recur(int node, int curk, double curw) { if (type[node] == 0) curw = 0; else if (type[node] == 2) { if (curw < dp[node][curk]) { dp[node][curk] = curw; if (node == target) return; for (auto a : adjlist[node]) recur(a.first, curk, curw + a.second); } curw /= 2; curk++; } if (curk > maxk) return; if (curw < dp[node][curk]) { dp[node][curk] = curw; if (node == target) return; for (auto a : adjlist[node]) recur(a.first, curk, curw + a.second); } } double solve(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr) { K = 30; maxk = K; target = H; type = arr; dp.clear(); adjlist.clear(); adjlist.resize(N); for (int i = 0; i < M; i++) adjlist[x[i]].push_back({y[i], c[i]}), adjlist[y[i]].push_back({x[i], c[i]}); dp.resize(N); for (auto &a : dp) a.resize(K + 1, 1e15); recur(0, 0, 0); double mini = 1e15; for (int i = 0; i <= K; i++) mini = min(mini, dp[H][i]); if (mini == 1e15) return -1; return mini; }
#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...