Submission #799363

# Submission time Handle Problem Language Result Execution time Memory
799363 2023-07-31T13:22:51 Z NothingXD Highway Tolls (IOI18_highway) C++17
90 / 100
230 ms 14892 KB
#include "highway.h"
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef double ld;
typedef complex<ld> point;

void debug_out(){cerr << endl;}
template<typename Head, typename... Tail>
void debug_out(Head H, Tail... T){
	cerr << H << ' ';
	debug_out(T...);
}

#define debug(...) cerr << "(" << #__VA_ARGS__ << "): ", debug_out(__VA_ARGS__)
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define MP(x, y) make_pair(x, y)

const int maxn = 2e5 + 10;

int n, m, h[maxn], par[maxn], st[maxn], ver[maxn], tme, edge[maxn][2], cnt;
vector<int> g[maxn];
bool mark[maxn];

void bfs(int V){
	memset(h, -1, sizeof h);
	memset(par, -1, sizeof par);
	memset(mark, true, sizeof mark);
	queue<int> q;
	q.push(V);
	tme = 0;
	h[V] = 0;
	st[V] = 0;
	par[V] = -1;
	ver[0] = V;
	while(!q.empty()){
		int v = q.front();	
		//debug(v, h[v], par[v], st[v], ver[st[v]]);
		q.pop();
		for (auto x: g[v]){
			int u = edge[x][0]^edge[x][1]^v;
			if (h[u] == -1){
				h[u] = h[v] + 1;
				par[u] = x;
				st[u] = ++tme;
				ver[tme] = u;
				mark[x] = false;
				q.push(u);
			}
		}
	}
	assert(tme == n-1);
}

void find_pair(int N, std::vector<int> U, std::vector<int> V, int A, int B) {
	n = N;
	m = U.size();
	for (int i = 0; i < m; i++){
		edge[i][0] = U[i];
		edge[i][1] = V[i];
		g[U[i]].push_back(i);
		g[V[i]].push_back(i);
	}

	vector<int> q(m, 0);
	ll dis = ask(q);
	int l = -1, r = n-1;
	while(l + 1 < r){
		vector<int> q(m, 0);
		int mid = (l + r) >> 1;
		for (int i = 0; i <= mid; i++){
			for (auto x: g[i]){
				q[x] = 1;
			}
		}
		if (ask(q) == dis) l = mid;
		else r = mid;
	}
	//debug(r);
	bfs(r);
//	for (int i = 0; i < m; i++) debug(i, mark[i]);
	l = 0, r = n;
	while(l + 1 < r){
		vector<int> q(m, 0);
		int mid = (l + r) >> 1;
	//	debug(mid);
		for (int i = 0; i < m; i++) q[i] = mark[i];
		for (int i = mid; i < n; i++){
			q[par[ver[i]]] = 1;
		}
	//	for (int i = 0; i < m; i++) debug(i, q[i]);
		if (ask(q) == dis) r = mid;
		else l = mid;
	}
	int S = ver[l];
	bfs(S);
	//debug(S);
//	for (int i = 0; i < m; i++) debug(i, mark[i]);
	l = 0, r = n;
	while(l + 1 < r){
		vector<int> q(m, 0);
		int mid = (l + r) >> 1;
	//	debug(mid);
		for (int i = 0; i < m; i++) q[i] = mark[i];
		for (int i = mid; i < n; i++){
			q[par[ver[i]]] = 1;
		}
		//for (int i = 0; i < m; i++) debug(i, q[i]);
		if (ask(q) == dis) r = mid;
		else l = mid;
	}
//	debug(ver[l]);
	answer(S, ver[l]);
}
# Verdict Execution time Memory Grader output
1 Correct 3 ms 6736 KB Output is correct
2 Correct 4 ms 6700 KB Output is correct
3 Correct 3 ms 6736 KB Output is correct
4 Correct 3 ms 6736 KB Output is correct
5 Correct 3 ms 6736 KB Output is correct
6 Correct 4 ms 6736 KB Output is correct
7 Correct 3 ms 6736 KB Output is correct
8 Correct 3 ms 6736 KB Output is correct
9 Correct 3 ms 6676 KB Output is correct
10 Correct 3 ms 6748 KB Output is correct
11 Correct 3 ms 6736 KB Output is correct
12 Correct 3 ms 6736 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 6736 KB Output is correct
2 Correct 14 ms 7396 KB Output is correct
3 Correct 98 ms 13264 KB Output is correct
4 Correct 116 ms 13260 KB Output is correct
5 Correct 148 ms 13264 KB Output is correct
6 Correct 87 ms 13244 KB Output is correct
7 Correct 115 ms 13296 KB Output is correct
8 Correct 111 ms 13272 KB Output is correct
9 Correct 113 ms 13268 KB Output is correct
10 Correct 137 ms 13256 KB Output is correct
11 Correct 116 ms 13104 KB Output is correct
12 Correct 134 ms 13108 KB Output is correct
13 Correct 119 ms 13112 KB Output is correct
14 Correct 105 ms 13124 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 13 ms 7376 KB Output is correct
2 Correct 20 ms 8196 KB Output is correct
3 Correct 33 ms 8872 KB Output is correct
4 Correct 81 ms 13136 KB Output is correct
5 Correct 68 ms 13120 KB Output is correct
6 Correct 88 ms 13100 KB Output is correct
7 Correct 76 ms 13184 KB Output is correct
8 Correct 77 ms 13104 KB Output is correct
9 Correct 83 ms 13112 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 6736 KB Output is correct
2 Correct 11 ms 7376 KB Output is correct
3 Correct 71 ms 11824 KB Output is correct
4 Correct 135 ms 13260 KB Output is correct
5 Correct 99 ms 13336 KB Output is correct
6 Correct 102 ms 13256 KB Output is correct
7 Correct 110 ms 13260 KB Output is correct
8 Correct 107 ms 13388 KB Output is correct
9 Correct 120 ms 13296 KB Output is correct
10 Correct 130 ms 13308 KB Output is correct
11 Correct 103 ms 13112 KB Output is correct
12 Correct 96 ms 13220 KB Output is correct
13 Correct 102 ms 13120 KB Output is correct
14 Correct 128 ms 13164 KB Output is correct
15 Correct 116 ms 13268 KB Output is correct
16 Correct 91 ms 13264 KB Output is correct
17 Correct 108 ms 13120 KB Output is correct
18 Correct 121 ms 13116 KB Output is correct
19 Correct 109 ms 13260 KB Output is correct
20 Correct 114 ms 13124 KB Output is correct
21 Correct 105 ms 13552 KB Output is correct
22 Correct 90 ms 13600 KB Output is correct
23 Correct 100 ms 13652 KB Output is correct
24 Correct 83 ms 13600 KB Output is correct
25 Correct 104 ms 13184 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 18 ms 7496 KB Output is correct
2 Correct 15 ms 7576 KB Output is correct
3 Correct 136 ms 13628 KB Output is correct
4 Correct 120 ms 13996 KB Output is correct
5 Correct 136 ms 14748 KB Output is correct
6 Correct 146 ms 14744 KB Output is correct
7 Correct 165 ms 14748 KB Output is correct
8 Correct 196 ms 14748 KB Output is correct
9 Correct 108 ms 12948 KB Output is correct
10 Correct 113 ms 13076 KB Output is correct
11 Correct 125 ms 13216 KB Output is correct
12 Correct 165 ms 14284 KB Output is correct
13 Correct 184 ms 14496 KB Output is correct
14 Correct 194 ms 14600 KB Output is correct
15 Correct 162 ms 14596 KB Output is correct
16 Correct 136 ms 13576 KB Output is correct
17 Correct 101 ms 13584 KB Output is correct
18 Correct 113 ms 13640 KB Output is correct
19 Correct 99 ms 13616 KB Output is correct
20 Correct 104 ms 13800 KB Output is correct
21 Correct 162 ms 14616 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 14 ms 7504 KB Output is correct
2 Correct 19 ms 7528 KB Output is correct
3 Partially correct 138 ms 13676 KB Output is partially correct
4 Partially correct 107 ms 13824 KB Output is partially correct
5 Correct 149 ms 13992 KB Output is correct
6 Partially correct 153 ms 14892 KB Output is partially correct
7 Partially correct 105 ms 13672 KB Output is partially correct
8 Correct 144 ms 13980 KB Output is correct
9 Partially correct 144 ms 13980 KB Output is partially correct
10 Partially correct 146 ms 14752 KB Output is partially correct
11 Partially correct 173 ms 14772 KB Output is partially correct
12 Partially correct 156 ms 14756 KB Output is partially correct
13 Correct 149 ms 13196 KB Output is correct
14 Correct 131 ms 13088 KB Output is correct
15 Correct 133 ms 13100 KB Output is correct
16 Correct 150 ms 13128 KB Output is correct
17 Correct 120 ms 13152 KB Output is correct
18 Correct 147 ms 13096 KB Output is correct
19 Correct 135 ms 14208 KB Output is correct
20 Correct 153 ms 14416 KB Output is correct
21 Partially correct 144 ms 14600 KB Output is partially correct
22 Partially correct 160 ms 14592 KB Output is partially correct
23 Correct 174 ms 14588 KB Output is correct
24 Partially correct 230 ms 14612 KB Output is partially correct
25 Partially correct 146 ms 14600 KB Output is partially correct
26 Correct 166 ms 14608 KB Output is correct
27 Correct 104 ms 13652 KB Output is correct
28 Partially correct 109 ms 13572 KB Output is partially correct
29 Partially correct 96 ms 13764 KB Output is partially correct
30 Partially correct 97 ms 13700 KB Output is partially correct
31 Partially correct 115 ms 13636 KB Output is partially correct
32 Correct 123 ms 13540 KB Output is correct
33 Correct 108 ms 13748 KB Output is correct
34 Correct 116 ms 13636 KB Output is correct
35 Partially correct 101 ms 13632 KB Output is partially correct
36 Correct 125 ms 13552 KB Output is correct
37 Correct 109 ms 13712 KB Output is correct
38 Correct 116 ms 13732 KB Output is correct
39 Correct 152 ms 14608 KB Output is correct
40 Correct 187 ms 14592 KB Output is correct
41 Partially correct 160 ms 14592 KB Output is partially correct
42 Correct 191 ms 14608 KB Output is correct