QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#560370 | #7343. Bicycle Race | bad_solver | WA | 6ms | 9648kb | C++23 | 3.1kb | 2024-09-12 15:22:40 | 2024-09-12 15:22:41 |
Judging History
answer
#include <bits/stdc++.h>
#define pb push_back
#define sz(x) (int)x.size()
#define all(x) x.begin(), x.end()
#define f first
#define s second
using namespace std;
using ll = long long;
using pii = pair <int, int>;
const int N = 1e5 + 3, K = 317;
int n, m, s[N * 2];
unordered_map <int, int> g[N];
void upd(int pos, int val, int max_range) {
for (s[pos += max_range] = val; pos /= 2;)
s[pos] = max(s[pos * 2], s[pos * 2 + 1]);
}
int get(int b, int e, int max_range) {
++e;
int ra = 0, rb = 0;
for (b += max_range, e += max_range; b < e; b /= 2, e /= 2) {
if (b % 2) ra = max(ra, s[b++]);
if (e % 2) rb = max(s[--e], rb);
}
return max(ra, rb);
}
int main() {
ios :: sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
vector <pii> edges;
for (int i = 1; i <= m; ++i) {
int u, v, w;
cin >> u >> v >> w;
edges.pb({u, v});
g[u][v] = g[v][u] = w;
}
// fix a host
int ans = 0;
for (int v = 1; v <= n; ++v) {
if (sz(g[v]) < 4)
continue;
if (sz(g[v]) <= K) {
vector <pii> nodes;
for (auto x : g[v])
nodes.pb(x);
sort(all(nodes));
vector <pair <pii, int> > vec;
for (int i = 0; i < sz(nodes); ++i) {
auto [u1, w1] = nodes[i];
for (int j = 0; j < i; ++j) {
auto [u2, w2] = nodes[j];
if (g[u1].count(u2)) {
int tot = w1 + w2 + g[u1][u2];
vec.pb({{i, j}, tot});
}
}
}
reverse(all(vec));
for (int i = 0; i <= sz(nodes) * 2; ++i)
s[i] = 0;
for (int i = 0; i < sz(vec); ++i) {
int j = i;
while (j + 1 < sz(vec) && vec[j + 1].f.f == vec[j].f.f)
++j;
for (int k = i; k <= j; ++k) {
int ret = 0;
if (vec[k].f.s + 1 < vec[k].f.f)
ret = get(vec[k].f.s + 1, vec[k].f.f - 1, sz(nodes));
if (vec[k].f.s > 0)
ret = max(ret, get(0, vec[k].f.s - 1, sz(nodes)));
if (vec[k].f.f + 1 < sz(nodes))
ret = max(ret, get(vec[k].f.f + 1, sz(nodes) - 1, sz(nodes)));
if (ret > 0)
ans = max(ans, ret + vec[k].s);
}
for (int k = i; k <= j; ++k) {
auto [y, x] = vec[k].f;
upd(x, vec[k].s, sz(nodes));
}
i = j;
}
}
else {
vector <pair <pii, int> > vec;
for (auto [x, y] : edges) {
if (!g[v].count(x) || !g[v].count(y))
continue;
if (x < y)
swap(x, y);
int tot = g[v][x] + g[v][y] + g[x][y];
vec.pb({{x - 1, y - 1}, tot});
}
sort(all(vec));
reverse(all(vec));
for (int i = 0; i <= n * 2; ++i)
s[i] = 0;
for (int i = 0; i < sz(vec); ++i) {
int j = i;
while (j + 1 < sz(vec) && vec[j + 1].f.f == vec[j].f.f)
++j;
for (int k = i; k <= j; ++k) {
int ret = 0;
if (vec[k].f.s + 1 < vec[k].f.f)
ret = get(vec[k].f.s + 1, vec[k].f.f - 1, n);
if (vec[k].f.s > 0)
ret = max(ret, get(0, vec[k].f.s - 1, n));
if (vec[k].f.f + 1 < n)
ret = max(ret, get(vec[k].f.f + 1, n - 1, n));
if (ret > 0)
ans = max(ans, ret + vec[k].s);
}
for (int k = i; k <= j; ++k) {
auto [y, x] = vec[k].f;
upd(x, vec[k].s, n);
}
i = j;
}
}
}
if (!ans) ans = -1;
cout << ans;
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 3ms
memory: 9064kb
input:
6 9 1 2 3 2 3 1 3 4 2 4 5 1 3 5 7 2 5 2 1 5 3 4 6 2 5 6 1
output:
18
result:
ok 1 number(s): "18"
Test #2:
score: 0
Accepted
time: 3ms
memory: 9088kb
input:
6 6 1 3 2 1 2 2 2 3 4 3 4 1 3 6 6 1 4 8
output:
-1
result:
ok 1 number(s): "-1"
Test #3:
score: 0
Accepted
time: 0ms
memory: 9444kb
input:
5 6 1 4 2 1 3 6 5 2 10 3 2 4 4 2 1 5 4 7
output:
-1
result:
ok 1 number(s): "-1"
Test #4:
score: 0
Accepted
time: 0ms
memory: 9352kb
input:
5 10 2 1 9 3 1 4 3 2 3 4 1 5 4 2 9 4 3 9 5 1 5 5 2 6 5 3 10 5 4 1
output:
43
result:
ok 1 number(s): "43"
Test #5:
score: 0
Accepted
time: 3ms
memory: 9004kb
input:
5 10 2 1 9 3 1 8 3 2 8 4 1 1 4 2 2 4 3 8 5 1 10 5 2 1 5 3 10 5 4 3
output:
46
result:
ok 1 number(s): "46"
Test #6:
score: 0
Accepted
time: 0ms
memory: 9116kb
input:
5 9 1 3 4 4 1 10 1 5 9 5 2 9 3 5 9 2 3 7 5 4 1 2 1 7 2 4 1
output:
45
result:
ok 1 number(s): "45"
Test #7:
score: 0
Accepted
time: 3ms
memory: 9060kb
input:
5 8 2 1 10 5 2 5 1 3 7 3 5 8 3 2 5 2 4 6 4 3 5 4 5 6
output:
41
result:
ok 1 number(s): "41"
Test #8:
score: 0
Accepted
time: 5ms
memory: 9336kb
input:
200 2000 182 97 91166 25 11 25393 179 58 43378 77 41 75588 139 96 94145 135 56 4609 190 159 47293 100 30 33854 21 132 93072 174 135 93547 144 137 81216 199 102 68247 89 155 53788 83 25 64607 166 179 44534 101 3 1474 37 106 57970 187 41 19892 16 76 32024 182 13 32061 72 69 5823 187 185 13918 151 86 3...
output:
552426
result:
ok 1 number(s): "552426"
Test #9:
score: 0
Accepted
time: 6ms
memory: 9480kb
input:
400 4000 102 372 24346 360 153 94255 272 316 33427 215 71 52304 368 202 60854 350 206 16796 32 372 31489 109 14 95840 163 71 79896 330 393 95303 324 110 13216 197 341 69668 54 241 46100 222 246 67388 140 13 539 272 79 22065 389 221 81398 187 122 60482 198 352 4291 196 14 18220 215 93 64141 336 54 54...
output:
545402
result:
ok 1 number(s): "545402"
Test #10:
score: -100
Wrong Answer
time: 4ms
memory: 9648kb
input:
600 6000 270 248 73879 94 543 63116 118 174 23476 152 301 12668 597 557 27564 566 156 28983 322 585 15685 319 598 41474 506 411 50369 334 450 80707 103 83 61569 195 333 71089 219 576 54764 409 18 70169 115 296 72896 92 155 42655 542 537 4827 387 202 1071 209 15 4380 511 165 22459 485 571 94537 570 2...
output:
538784
result:
wrong answer 1st numbers differ - expected: '545966', found: '538784'