Submission #749987

#TimeUsernameProblemLanguageResultExecution timeMemory
749987I_love_Hoang_YenCyberland (APIO23_cyberland)C++17
5 / 100
23 ms2768 KiB
#include "cyberland.h" #include <bits/stdc++.h> #define SZ(s) ((int) ((s).size())) using namespace std; const int ZERO = 0; const int NORMAL = 1; const int DIV2 = 2; void upMin(double& res, double val) { if (res < -0.5) res = val; else res = min(res, val); } double sub1( int n, int maxDiv2, int target, const vector<tuple<int,int,int>>& edges, const vector<int>& node_types) { if (target == 0) { return 0.0; } double res = -1; vector<vector<double>> costs(n, vector<double> (n, -1)); for (auto [u, v, cost] : edges) { costs[u][v] = costs[v][u] = cost; } // go directly from 0 -> target if (costs[0][target] >= 0) upMin(res, costs[0][target]); if (n <= 2) return res; // go 0 -> other vertex -> target int other = 3 - target; if (costs[0][other] >= 0 && costs[other][target] >= 0) { switch (node_types[other]) { case NORMAL: upMin(res, costs[0][other] + costs[other][target]); break; case ZERO: upMin(res, costs[other][target]); break; case DIV2: if (maxDiv2 >= 1) { upMin(res, costs[0][other] / 2.0 + costs[other][target]); } else { upMin(res, costs[0][other] + costs[other][target]); } break; } } return res; } double solve( int n, int m, int maxDiv2, int target, vector<int> edge_froms, vector<int> edge_tos, vector<int> edge_costs, vector<int> node_types) { assert(m == SZ(edge_froms)); assert(m == SZ(edge_tos)); assert(m == SZ(edge_costs)); assert(n == SZ(node_types)); vector<tuple<int,int,int>> edges(m); for (int i = 0; i < m; ++i) { assert(0 <= edge_froms[i] && edge_froms[i] < n); assert(0 <= edge_tos[i] && edge_tos[i] < n); assert(1 <= edge_costs[i] && edge_costs[i] < 1000111000); edges[i] = { edge_froms[i], edge_tos[i], edge_costs[i] }; } if (n <= 3) { return sub1( n, maxDiv2, target, edges, node_types); } return 0.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...
#Verdict Execution timeMemoryGrader output
Fetching results...