QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#114133#2746. Highway Tollsminhcool#0 15ms12852kbC++173.4kb2023-06-21 09:45:192024-05-31 14:08:44

Judging History

This is the latest submission verdict.

  • [2024-05-31 14:08:44]
  • Judged
  • Verdict: 0
  • Time: 15ms
  • Memory: 12852kb
  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-06-21 09:45:19]
  • Submitted

answer

//#define local
#ifndef local
#include "highway.h"
#endif
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
using namespace std;

#define ll long long
#define fi first
#define se second
#define pb push_back
#define mp make_pair

typedef pair<ll, ll> ii;
typedef pair<ii, ll> iii;
typedef pair<ii, ii> iiii;

const ll N = 3e5 + 5;

const ll oo = 1e18 + 7, mod = 1e9 + 7;

mt19937 rng(1);

ll rnd(ll l, ll r){
	ll temp = rng() % (r - l + 1);
	return abs(temp) + l;
}

// ask(vector<ll>)

vector<ii> Adj[N];

ll mini;

ll n, m;

vector<ii> v1, v2;

bool vis[N];

bool ck = 0;

vector<int> ok;

int dist;

void dfs(ll u, ll d){
	vis[u] = 1;
	if(!ck) v1.pb({u, d});
	else v2.pb({u, d});
	if(d == dist) ok.pb(u);
	for(auto it : Adj[u]){
		if(it.se < mini) continue;
		if(vis[it.fi]) continue;
		dfs(it.fi, d + 1);
	}
}

bool cmp(ii a, ii b){
	return a.se > b.se;
}

void find_pair(int N, vector<int> U, vector<int> V, int A, int B) {
	n = N, m = U.size();
	for(ll i = 0; i < m; i++){
		Adj[U[i]].pb({V[i], i});
		Adj[V[i]].pb({U[i], i});
	}
	// first step: find the optimal ans by toggle all 0s
	ll opt;
	vector<int> temp;
	for(ll i = 0; i < m; i++) temp.pb(0);
	opt = ask(temp);
	// phase 1: let us set (1->i) to B in order to find a bridge + split graph llo two parts
	ll le = 0, ri = m - 1;
	while(le < ri){
		ll mid = (le + ri) >> 1;
		temp.clear();
		for(ll i = 0; i <= mid; i++) temp.pb(1);
		for(ll i = mid + 1; i < m; i++) temp.pb(0);
		ll get = ask(temp);
		if(get == opt) le = mid + 1;
		else ri = mid;
	}
	mini = le + 1;
	// phase 2: find S/T
	ck = 0;
	dfs(U[le], 0);
	//ck = 1;
	//dfs(V[le], 0);
	sort(v1.begin(), v1.end(), cmp);
	//sort(v2.begin(), v2.end(), cmp);
	ll le2 = 0, ri2 = v1.size() - 1;
	while(le2 < ri2){
		ll mid = (le2 + ri2) >> 1;
		temp.resize(m);
		for(ll i = 0; i < le; i++) temp[i] = 1;
		temp[le] = 0;
		for(ll i = le + 1; i < m; i++) temp[i] = 0;
		for(ll i = 0; i <= mid; i++){
			ll u = v1[i].fi;
			for(auto it : Adj[u]){
				if(it.se < mini) continue;
				temp[it.se] = 1;
			}
		}
		ll get = ask(temp);
		if(get == opt) le2 = mid + 1;
		else ri2 = mid;
	}
	/*
	ll le3 = 0, ri3 = v2.size() - 1;
	while(le3 < ri3){
		ll mid = (le3 + ri3) >> 1;
		temp.resize(m);
		for(ll i = 0; i < le; i++) temp[i] = 1;
		temp[le] = 0;
		for(ll i = le + 1; i < m; i++) temp[i] = 0;
		for(ll i = 0; i <= mid; i++){
			ll u = v2[i].fi;
			for(auto it : Adj[u]){
				if(it.se < mini) continue;
				temp[it.se] = 1;
			}
		}
		ll get = ask(temp);
		if(get == opt) le3 = mid + 1;
		else ri3 = mid;
	}*/
	int S = v1[(int)le2].fi;
	dist = opt / A;
//	cout << S << " " << opt << " " << A << " " << dist << "\n";
	ok.clear();
	mini = 0;
	for(int i = 0; i < n; i++) vis[i] = 0;
	dfs(S, 0);
//	for(auto it : ok) cout << it << " ";
//	cout << "\n";
	int le3 = 0, ri3 = ok.size() - 1;
	while(le < ri){
		int mid = (le + ri) >> 1;
		temp.resize(m);
		for(int i = 0; i < m; i++) temp[i] = 0;
		for(int i = 0; i <= mid; i++){
			int u = ok[i];
			for(auto it : Adj[u]) temp[it.se] = 1;
		}
		int get = ask(temp);
		if(get == opt) le3 = mid + 1;
		else ri3 = mid; 
	}
	int T = ok[le3];
	answer(S, T);
	//answer((int)v1[(int)le2].fi, (int)v2[(int)le3].fi);
}

#ifdef local
void process(){

}

signed main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	ll t;
	cin >> t;
	while(t--) process();
}
#endif

詳細信息

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 3ms
memory: 10860kb

input:

100 99 1 2 0 75
15 17
47 98
19 41
22 51
38 7
96 5
47 75
28 12
6 0
25 76
0 11
32 66
97 81
23 56
32 94
46 79
18 2
0 3
44 33
89 97
49 31
43 65
56 9
71 93
87 18
12 37
94 34
73 42
66 15
15 8
27 85
3 37
57 28
74 12
69 60
91 24
82 39
60 15
67 78
1 47
19 92
86 75
30 38
86 14
50 96
38 89
50 68
70 52
63 12
12...

output:

Wrong Answer: {s, t} is wrong

result:

wrong answer 

Subtask #2:

score: 0
Wrong Answer

Test #13:

score: 0
Wrong Answer
time: 2ms
memory: 11236kb

input:

1000 999 1 3 0 874
571 255
559 871
73 988
563 389
502 605
104 306
874 383
591 152
89 697
365 670
830 695
726 652
271 643
284 50
607 442
30 361
579 346
435 799
972 675
310 421
122 47
222 915
343 917
622 336
888 484
48 11
761 419
305 678
504 115
28 121
133 132
369 296
415 982
408 434
24 132
492 764
94...

output:

Wrong Answer: {s, t} is wrong

result:

wrong answer 

Subtask #3:

score: 0
Wrong Answer

Test #27:

score: 0
Wrong Answer
time: 5ms
memory: 12852kb

input:

10000 9999 1 3 1402 1418
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
10 11
11 12
12 13
13 14
14 15
15 16
16 17
17 18
18 19
19 20
20 21
21 22
22 23
23 24
24 25
25 26
26 27
27 28
28 29
29 30
30 31
31 32
32 33
33 34
34 35
35 36
36 37
37 38
38 39
39 40
40 41
41 42
42 43
43 44
44 45
45 46
46 47
47 48
48 49
...

output:

Wrong Answer: {s, t} is wrong

result:

wrong answer 

Subtask #4:

score: 0
Wrong Answer

Test #36:

score: 0
Wrong Answer
time: 3ms
memory: 11104kb

input:

1000 999 1 2 685 383
303 325
476 191
222 120
555 130
655 639
211 393
795 613
389 888
960 815
446 325
846 315
51 348
409 82
470 402
681 258
772 969
767 164
290 46
34 887
453 584
142 73
814 603
36 665
701 727
200 702
638 685
33 580
422 859
550 486
849 250
319 144
189 502
140 63
650 765
251 942
304 99
...

output:

Wrong Answer: {s, t} is wrong

result:

wrong answer 

Subtask #5:

score: 0
Wrong Answer

Test #61:

score: 0
Wrong Answer
time: 15ms
memory: 12724kb

input:

10000 11000 1 2 4410 9396
4021 14
6386 7290
4635 4576
1295 5062
8655 8174
3709 4958
7062 1337
6608 2435
9704 3638
5777 2945
1125 365
2861 1023
1560 8478
1423 7827
2638 6211
1429 4399
626 6111
9981 7033
7740 7631
3904 3628
2812 6221
9946 2671
1646 6255
2653 7666
5575 3080
8314 2317
1868 7058
8177 514...

output:

Wrong Answer: {s, t} is wrong

result:

wrong answer 

Subtask #6:

score: 0
Wrong Answer

Test #82:

score: 0
Wrong Answer
time: 12ms
memory: 12412kb

input:

10000 11000 1 3 242 6594
7153 1171
3833 5240
2223 8238
7347 5616
7332 7717
1485 7260
2323 3839
7359 9719
6973 7446
9821 1553
4652 663
3200 30
9465 9801
5461 4480
2298 513
5950 7473
4726 6408
7990 2674
4736 7663
9124 7932
1022 807
6870 6840
8507 62
4036 7781
1867 4826
9093 6486
9303 7974
5399 4503
90...

output:

Wrong Answer: {s, t} is wrong

result:

wrong answer