Submission #760117

#TimeUsernameProblemLanguageResultExecution timeMemory
760117danikoynovCyberland (APIO23_cyberland)C++17
0 / 100
2240 ms39224 KiB
#include "cyberland.h" #include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 10; struct edge { int ver, div; double cost; edge(int _ver = 0, int _div = 0, double _cost = 0) { ver = _ver; div = _div; cost = _cost; } bool operator < (const edge &e) const { if (div > e.div) return true; return cost > e.cost; } }; const int maxk = 31; const double inf = 1e18; vector < pair < int, double > > adj[maxn]; double dp[maxk][maxn]; int used[maxk][maxn]; double solve(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr) { if (K > 30) K = 30; for (int i = 0; i < N; i ++) adj[i].clear(); for (int i = 0; i < M; i ++) { adj[x[i]].push_back({y[i], c[i]}); adj[y[i]].push_back({x[i], c[i]}); } priority_queue < edge > q; for (int j = 0; j <= K; j ++) for (int i = 0; i < N; i ++) { used[j][i] = 0; dp[j][i] = inf; } dp[0][0] = 0; q.push(edge(0, 0, 0)); while(!q.empty()) { edge cur = q.top(); q.pop(); ///cout << q.size() << endl; cout << cur.ver << " " << cur.div << " " << cur.cost << endl; //cout << used[cur.div][cur.ver] << endl; if (used[cur.div][cur.ver]) continue; used[cur.div][cur.ver] = 1; if (cur.ver == H) continue; ///cout << adj[cur.ver].size() << endl; for (pair < int, double > nb : adj[cur.ver]) { edge to(nb.first, cur.div, cur.cost + nb.second); ///cout << "here " << to.ver << " : " << to.cost << endl; if (arr[to.ver] == 0) { to.cost = 0; if (to.cost < dp[to.div][to.ver]) { dp[to.div][to.ver] = to.cost; q.push(to); } } else if (arr[to.ver] == 1) { if (to.cost < dp[to.div][to.ver]) { dp[to.div][to.ver] = to.cost; q.push(to); } } else { if (to.cost < dp[to.div][to.ver]) { dp[to.div][to.ver] = to.cost; q.push(to); } if (to.div < K) { to.cost = to.cost / 2.0; to.div ++; if (to.cost < dp[to.div][to.ver]) { dp[to.div][to.ver] = to.cost; q.push(to); } } } } } double ans = inf; for (int j = 0; j <= K; j ++) ans = min(ans, dp[j][H]); return ans; }

Compilation message (stderr)

cyberland.cpp: In function 'double solve(int, int, int, int, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
cyberland.cpp:38:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   38 |     if (K > 30)
      |     ^~
cyberland.cpp:41:9: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
   41 |         for (int i = 0; i < N; i ++)
      |         ^~~
#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...