QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#114133 | #2746. Highway Tolls | minhcool# | 0 | 15ms | 12852kb | C++17 | 3.4kb | 2023-06-21 09:45:19 | 2024-05-31 14:08:44 |
Judging History
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