Submission #674894

# Submission time Handle Problem Language Result Execution time Memory
674894 2022-12-26T13:19:32 Z QwertyPi City Mapping (NOI18_citymapping) C++14
25 / 100
18 ms 2620 KB
#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;
long long d[MAXN];
bool done[MAXN];
void solve(vector<int> v){
	if(v.size() == 1) return;
	for(auto i : v) done[i] = false;
	int id = rng() % v.size();
	int rt = v[id]; d[rt] = 0; done[rt] = true;
	for(auto i : v){
		if(i != rt) d[i] = get_distance(rt, i);
	}
	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;
			}
		}
		solve(sub_tree);
	}
}

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

citymapping.cpp: In function 'void solve(std::vector<int>)':
citymapping.cpp:30:3: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   30 |   if(ch == -1) break; done[ch] = true;
      |   ^~
citymapping.cpp:30:23: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
   30 |   if(ch == -1) break; done[ch] = true;
      |                       ^~~~
citymapping.cpp:31:28: warning: narrowing conversion of 'd[ch]' from 'long long int' to 'int' [-Wnarrowing]
   31 |   E.push_back({rt, ch, d[ch]});
      |                        ~~~~^
citymapping.cpp: In function 'void find_roads(int, int, int*, int*, int*)':
citymapping.cpp:50:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<edge>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   50 |  for(int i = 0; i < E.size(); i++){
      |                 ~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 3 ms 596 KB Correct: 25843 out of 500000 queries used.
2 Correct 4 ms 724 KB Correct: 41217 out of 500000 queries used.
3 Correct 18 ms 2620 KB Correct: 236004 out of 500000 queries used.
4 Correct 13 ms 2292 KB Correct: 190528 out of 500000 queries used.
5 Correct 7 ms 1348 KB Correct: 79556 out of 500000 queries used.
# Verdict Execution time Memory Grader output
1 Correct 3 ms 596 KB Correct: 25843 out of 500000 queries used.
2 Correct 4 ms 724 KB Correct: 41217 out of 500000 queries used.
3 Correct 18 ms 2620 KB Correct: 236004 out of 500000 queries used.
4 Correct 13 ms 2292 KB Correct: 190528 out of 500000 queries used.
5 Correct 7 ms 1348 KB Correct: 79556 out of 500000 queries used.
6 Correct 3 ms 724 KB Correct: 26209 out of 500000 queries used.
7 Correct 5 ms 980 KB Correct: 47822 out of 500000 queries used.
8 Correct 14 ms 1852 KB Correct: 168265 out of 500000 queries used.
9 Correct 10 ms 1748 KB Correct: 137267 out of 500000 queries used.
10 Correct 6 ms 852 KB Correct: 52949 out of 500000 queries used.
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 596 KB Too many calls to get_distance().
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 596 KB Too many calls to get_distance().
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 596 KB Correct: 25843 out of 500000 queries used.
2 Correct 4 ms 724 KB Correct: 41217 out of 500000 queries used.
3 Correct 18 ms 2620 KB Correct: 236004 out of 500000 queries used.
4 Correct 13 ms 2292 KB Correct: 190528 out of 500000 queries used.
5 Correct 7 ms 1348 KB Correct: 79556 out of 500000 queries used.
6 Correct 3 ms 724 KB Correct: 26209 out of 500000 queries used.
7 Correct 5 ms 980 KB Correct: 47822 out of 500000 queries used.
8 Correct 14 ms 1852 KB Correct: 168265 out of 500000 queries used.
9 Correct 10 ms 1748 KB Correct: 137267 out of 500000 queries used.
10 Correct 6 ms 852 KB Correct: 52949 out of 500000 queries used.
11 Incorrect 2 ms 596 KB Too many calls to get_distance().
12 Halted 0 ms 0 KB -