Submission #674896

#TimeUsernameProblemLanguageResultExecution timeMemory
674896QwertyPiCity Mapping (NOI18_citymapping)C++14
25 / 100
40 ms23504 KiB
#include "citymapping.h" #include <bits/stdc++.h> using namespace std; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); struct edge{ int u, v, w; }; vector<edge> E; const int MAXN = 1e3 + 11; bool done[MAXN]; void solve(vector<int> v, vector<long long> d = {}, int pa = -1){ if(v.size() == 1) return; for(auto i : v) done[i] = false; int rt; if(d.empty()){ d.resize(MAXN); int id = rng() % v.size(); rt = v[id]; d[rt] = 0; done[rt] = true; for(auto i : v){ if(i != rt) d[i] = get_distance(rt, i); } }else{ rt = pa; done[rt] = true; } for(int tr = 0; tr < 3; tr++){ int ch = -1; for(auto i : v){ if(!done[i] && (ch == -1 || d[ch] > d[i])) ch = i; } if(ch == -1) break; done[ch] = true; E.push_back({rt, ch, d[ch]}); vector<long long> d2(MAXN); vector<int> sub_tree {ch}; for(auto i : v){ if(!done[i] && i != ch) { d2[i] = get_distance(ch, i); if(d2[i] <= d[i]) sub_tree.push_back(i), done[i] = true; } } vector<long long> nd(MAXN); for(auto i : v){ nd[i] = d[i] - d[ch]; } solve(sub_tree, nd, ch); } } void find_roads(int N, int Q, int A[], int B[], int W[]) { vector<int> v; for(int i = 1; i <= N; i++){ v.push_back(i); } solve(v); for(int i = 0; i < E.size(); i++){ A[i] = E[i].u, B[i] = E[i].v, W[i] = E[i].w; } return; }

Compilation message (stderr)

citymapping.cpp: In function 'void solve(std::vector<int>, std::vector<long long int>, int)':
citymapping.cpp:36:3: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   36 |   if(ch == -1) break; done[ch] = true;
      |   ^~
citymapping.cpp:36:23: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
   36 |   if(ch == -1) break; done[ch] = true;
      |                       ^~~~
citymapping.cpp:37:30: warning: narrowing conversion of 'd.std::vector<long long int>::operator[](((std::vector<long long int>::size_type)ch))' from '__gnu_cxx::__alloc_traits<std::allocator<long long int>, long long int>::value_type' {aka 'long long int'} to 'int' [-Wnarrowing]
   37 |   E.push_back({rt, ch, d[ch]});
      |                              ^
citymapping.cpp: In function 'void find_roads(int, int, int*, int*, int*)':
citymapping.cpp:60:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<edge>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   60 |  for(int i = 0; i < E.size(); 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...