Submission #815796

# Submission time Handle Problem Language Result Execution time Memory
815796 2023-08-08T23:37:36 Z Lobo Highway Tolls (IOI18_highway) C++17
51 / 100
162 ms 18016 KB
#include "highway.h"
#include<bits/stdc++.h>
using namespace std;
#define fr first
#define sc second
#define mp make_pair
#define pb push_back
#define all(x) x.begin(),x.end()
#define int long long
const int inf = 1e18+10;
const int maxn = 9e4+10;

int n, m, par[maxn];
vector<int> parid[maxn];
vector<int> g[maxn];

void find_pair(int32_t N, std::vector<int32_t> U, std::vector<int32_t> V, int32_t A, int32_t B) {
	n = N;
	m = U.size();
	for(int i = 0; i < m; i++) {
		g[U[i]].pb(i);
		g[V[i]].pb(i);
	}
	vector<int32_t> vectudoa(m,0);
	int tudoa = ask(vectudoa);
	int path = tudoa/A;

	int edgein = -1;
	int lbs,rbs;
	vector<int32_t> vectoll(m,0);
	lbs = 0;
	rbs = m-1;
	while(lbs <= rbs) {
		int mid = (lbs+rbs)/2;
		vectoll.clear(); vectoll.resize(m,0);
		for(int i = 0; i <= mid; i++) {
			vectoll[i] = 1;
		}

		int toll = ask(vectoll);

		if(toll != tudoa) {
			edgein = mid;
			rbs = mid-1;
		}
		else {
			lbs = mid+1;
		}
	}

	assert(edgein != -1);

	int ss = U[edgein];
	int tt = V[edgein];

	vector<pair<int,int>> d(n+10,mp(inf,0));
	d[ss] = mp(0,ss); par[ss] = -1;
	d[tt] = mp(0,tt); par[tt] = -1;

	queue<int> q; q.push(ss); q.push(tt);
	while(q.size()) {
		int u = q.front(); q.pop();

		for(auto id : g[u]) {
			int v = U[id]+V[id]-u;
			if(d[v].fr > d[u].fr+1) {
				d[v] = mp(d[u].fr+1,d[u].sc);
				par[v] = u;
				parid[v].clear(); parid[v].pb(id);
				q.push(v);
			}
			else if(d[v].fr == d[u].fr+1 && d[v].sc != d[u].sc) {
				d[v].sc = -1;
				parid[v].clear();
			}
			else if(d[v].fr == d[u].fr+1) {
				parid[v].pb(id);
			}
		}
	}

	int toll0;

	vector<pair<int,int>> Ds;
	for(int i = 0; i < n; i++) {
		if(d[i].sc == ss) {
			Ds.pb(mp(d[i].fr,i));
		}
	}
	sort(all(Ds));
	lbs = 0;
	rbs = (int) Ds.size()-1;
	int32_t s = -1;

	vectoll.clear(); vectoll.resize(m,1);
	for(int i = 0; i < (int) Ds.size(); i++) {
		for(auto id : parid[Ds[i].sc]) vectoll[id] = 0;
		// if(parid[Ds[i].sc] != -1) vectoll[parid[Ds[i].sc]] = 1;
	}
	toll0 = ask(vectoll);

	while(lbs <= rbs) {
		int mid = (lbs+rbs)/2;

		vectoll.clear(); vectoll.resize(m,1);

		// for(int i = 0; i <= mid; i++) {
		// 	if(parid[Ds[i].sc] != -1) vectoll[parid[Ds[i].sc]] = 0;
		// }

		for(int i = 0; i <= mid; i++) {
			for(auto id : parid[Ds[i].sc]) vectoll[id] = 0;
			// if(parid[Ds[i].sc] != -1) vectoll[parid[Ds[i].sc]] = 1;
		}

		int toll = ask(vectoll);

		if(toll == toll0) {
			s = Ds[mid].sc;
			rbs = mid-1;
		}
		else {
			lbs = mid+1;
		}
	}

	vector<pair<int,int>> Dt;
	for(int i = 0; i < n; i++) {
		if(d[i].sc == tt) {
			Dt.pb(mp(d[i].fr,i));
		}
	}
	sort(all(Dt));
	lbs = 0;
	rbs = (int) Dt.size()-1;
	int32_t t = -1;

	vectoll.clear(); vectoll.resize(m,1);
	for(int i = 0; i < (int) Dt.size(); i++) {
		for(auto id : parid[Dt[i].sc]) vectoll[id] = 0;
		// if(parid[Ds[i].sc] != -1) vectoll[parid[Ds[i].sc]] = 1;
	}
	toll0 = ask(vectoll);

	while(lbs <= rbs) {
		int mid = (lbs+rbs)/2;

		vectoll.clear(); vectoll.resize(m,1);

		// for(int i = 0; i <= mid; i++) {
		// 	if(parid[Dt[i].sc] != -1) vectoll[parid[Dt[i].sc]] = 0;
		// }

		for(int i = 0; i <= mid; i++) {
			for(auto id : parid[Dt[i].sc]) vectoll[id] = 0;
			// if(parid[Dt[i].sc] != -1) vectoll[parid[Dt[i].sc]] = 1;
		}

		int toll = ask(vectoll);

		if(toll == toll0) {
			t = Dt[mid].sc;
			rbs = mid-1;
		}
		else {
			lbs = mid+1;
		}
	}

	// cout << ss << " " << tt << endl;
	// cout << s << " " << t << endl;
	answer(s,t);
}

Compilation message

highway.cpp: In function 'void find_pair(int32_t, std::vector<int>, std::vector<int>, int32_t, int32_t)':
highway.cpp:26:6: warning: unused variable 'path' [-Wunused-variable]
   26 |  int path = tudoa/A;
      |      ^~~~
# Verdict Execution time Memory Grader output
1 Correct 3 ms 4432 KB Output is correct
2 Correct 2 ms 4432 KB Output is correct
3 Correct 2 ms 4544 KB Output is correct
4 Correct 2 ms 4432 KB Output is correct
5 Correct 2 ms 4432 KB Output is correct
6 Correct 2 ms 4432 KB Output is correct
7 Correct 2 ms 4540 KB Output is correct
8 Correct 2 ms 4432 KB Output is correct
9 Correct 2 ms 4432 KB Output is correct
10 Correct 2 ms 4456 KB Output is correct
11 Correct 3 ms 4432 KB Output is correct
12 Correct 2 ms 4432 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 4560 KB Output is correct
2 Correct 11 ms 6096 KB Output is correct
3 Correct 129 ms 17112 KB Output is correct
4 Correct 129 ms 17168 KB Output is correct
5 Correct 112 ms 17108 KB Output is correct
6 Correct 152 ms 17080 KB Output is correct
7 Correct 131 ms 17116 KB Output is correct
8 Correct 109 ms 17160 KB Output is correct
9 Correct 124 ms 17052 KB Output is correct
10 Correct 134 ms 17136 KB Output is correct
11 Correct 104 ms 16656 KB Output is correct
12 Correct 118 ms 16564 KB Output is correct
13 Correct 162 ms 16624 KB Output is correct
14 Correct 107 ms 16500 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 12 ms 5960 KB Output is correct
2 Correct 18 ms 7240 KB Output is correct
3 Correct 19 ms 8532 KB Output is correct
4 Correct 73 ms 16396 KB Output is correct
5 Correct 99 ms 16416 KB Output is correct
6 Correct 76 ms 16952 KB Output is correct
7 Correct 75 ms 16584 KB Output is correct
8 Correct 73 ms 15940 KB Output is correct
9 Correct 93 ms 16472 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 4560 KB Output is correct
2 Correct 13 ms 5924 KB Output is correct
3 Correct 89 ms 14844 KB Output is correct
4 Correct 107 ms 17072 KB Output is correct
5 Correct 113 ms 17124 KB Output is correct
6 Correct 97 ms 17068 KB Output is correct
7 Correct 136 ms 17044 KB Output is correct
8 Correct 141 ms 17052 KB Output is correct
9 Correct 112 ms 17048 KB Output is correct
10 Correct 129 ms 17116 KB Output is correct
11 Correct 139 ms 16472 KB Output is correct
12 Correct 120 ms 16844 KB Output is correct
13 Correct 106 ms 16576 KB Output is correct
14 Correct 126 ms 16448 KB Output is correct
15 Correct 99 ms 17048 KB Output is correct
16 Correct 134 ms 17096 KB Output is correct
17 Correct 145 ms 16540 KB Output is correct
18 Correct 139 ms 16500 KB Output is correct
19 Correct 122 ms 17132 KB Output is correct
20 Correct 101 ms 16660 KB Output is correct
21 Correct 92 ms 17952 KB Output is correct
22 Correct 107 ms 18016 KB Output is correct
23 Correct 94 ms 17592 KB Output is correct
24 Correct 104 ms 17564 KB Output is correct
25 Correct 113 ms 16596 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 16 ms 5944 KB Output is incorrect: {s, t} is wrong.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 13 ms 5960 KB Output is incorrect: {s, t} is wrong.
2 Halted 0 ms 0 KB -