QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#145342 | #2002. Race | K8He | 0 | 26ms | 19532kb | C++20 | 3.5kb | 2023-08-22 08:49:38 | 2023-08-22 08:49:39 |
Judging History
answer
#include <bits/stdc++.h>
#include "race.h"
#define lowb(a, r, x) lower_bound(a + 1, a + r + 1, x) - a
#define uppb(a, r, x) upper_bound(a + 1, a + r + 1, x) - a
#define _for(i, a, b) for (ll i = a; i <= b; ++i)
#define for_(i, a, b) for (ll i = a; i >= b; --i)
#define far(i, vec) for (auto i : vec)
#define bdmd ll mid = (l + r) >> 1
#define NO nullptr
typedef long double ldb;
typedef long long ll;
typedef double db;
typedef std::pair <ll, ll> pll;
const ll N = 2e5 + 10, K = 1e6 + 10, inf = 1ll << 60;
namespace SOLVE {
ll n, k, root, sz[N], mx[N], len[K], ans;
std::vector <pll> tu[N], tmp;
bool vis[N];
inline ll rnt () {
ll x = 0, w = 1; char c = getchar ();
while (!isdigit (c)) { if (c == '-') w = -1; c = getchar (); }
while (isdigit (c)) x = (x << 3) + (x << 1) + (c ^ 48), c = getchar ();
return x * w;
}
void GetDis (ll u, ll fa, ll s, ll d) {
if (s > k) return;
// printf ("%lld %lld %lld %lld %lld %lld %lld\n", u, fa, d, s, t, len[s], len[t]);
tmp.emplace_back (s, d);
far (p, tu[u]) {
ll v = p.first, w = p.second;
if (vis[v] || v == fa) continue;
GetDis (v, u, s + w, d + 1);
}
return;
}
void Clear (ll u, ll fa, ll s, ll d) {
if (s > k) return;
len[s] = inf;
far (p, tu[u]) {
ll v = p.first, w = p.second;
if (vis[v] || v == fa) continue;
Clear (v, u, s + w, d + 1);
}
return;
}
inline void Calc (ll u) {
// printf ("%lld %lld\n", u, ans);
far (p, tu[u]) {
ll v = p.first, w = p.second;
if (vis[v]) continue;
GetDis (v, u, w, 1);
far (j, tmp) {
ll t = k - j.first;
if (len[t] < inf) ans = std::min (ans, len[t] + j.second);//, printf ("%lld %lld %lld %lld %lld\n", t, len[t], j.first, j.second, ans);
}
far (j, tmp) len[j.first] = std::min (len[j.first], j.second);
std::vector <pll> ().swap (tmp);
// printf ("%lld %lld\n", v, ans);
}
Clear (u, 0, 0, 0);
// printf ("%lld %lld\n", u, ans);
// puts ("");
return;
}
void GetRoot (ll u, ll fa) {
sz[u] = 1, mx[u] = 0;
far (p, tu[u]) {
ll v = p.first, w = p.second;
if (vis[v] || v == fa) continue;
GetRoot (v, u), sz[u] += sz[v];
mx[u] = std::max (mx[u], sz[v]);
}
mx[u] = std::max (mx[u], sz[0] - sz[u]);
if (mx[u] < mx[root]) root = u;
return;
}
void Divide (ll u) {
Calc (u);
vis[u] = true;
far (p, tu[u]) {
ll v = p.first, w = p.second;
if (vis[v]) continue;
sz[0] = sz[v], mx[root = 0] = inf;
GetRoot (v, u);
Divide (root);
}
return;
}
// inline void In () {
// n = rnt (), k = rnt ();
// _for (i, 1, n - 1) {
// ll u = rnt () + 1, v = rnt () + 1, w = rnt ();
// tu[u].emplace_back (v, w);
// tu[v].emplace_back (u, w);
// }
// return;
// }
inline void In (int N, int K, int H[][2], int L[]) {
n = N, k = K;
_for (i, 1, n - 1) {
ll u = H[i][0] + 1, v = H[i][1] + 1, w = L[i];
tu[u].emplace_back (v, w);
tu[v].emplace_back (u, w);
}
return;
}
inline void Solve () {
ans = inf, sz[0] = n, mx[root = 0] = inf;
_for (i, 1, k) len[i] = inf;
GetRoot (1, 0);
Divide (root);
return;
}
inline void Out () {
printf ("%lld\n", ans == inf ? -1 : ans);
return;
}
}
int best_path(int N, int K, int H[][2], int L[]) {
SOLVE::In (N, K, H, L);
SOLVE::Solve ();
return SOLVE::ans == inf ? -1 : SOLVE::ans;
}
// int main () {
// #ifndef ONLINE_JUDGE
// freopen ("data.in", "r", stdin);
// #endif
// SOLVE::In ();
// SOLVE::Solve ();
// SOLVE::Out ();
// return 0;
// } /*
// */
详细
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 0
Wrong Answer
time: 3ms
memory: 18240kb
input:
100 50 0 1 1 1 2 2 2 3 2 3 4 1 4 5 2 5 6 1 6 7 1 7 8 1 8 9 1 9 10 2 10 11 2 11 12 2 12 13 1 13 14 1 14 15 1 15 16 2 16 17 1 17 18 2 18 19 1 19 20 1 20 21 1 21 22 2 22 23 2 23 24 2 24 25 2 25 26 1 26 27 2 27 28 2 28 29 2 29 30 2 30 31 2 31 32 1 32 33 1 33 34 2 34 35 2 35 36 1 36 37 1 37 38 1 38 39 1 ...
output:
Incorrect. Returned -1, Expected 30.
Subtask #2:
score: 0
Skipped
Dependency #1:
0%
Subtask #3:
score: 0
Wrong Answer
Test #39:
score: 0
Wrong Answer
time: 26ms
memory: 19532kb
input:
100000 100 1 0 1 2 1 10 3 1 1 4 3 5 5 3 6 6 5 6 7 3 10 8 5 9 9 8 7 10 9 9 11 6 7 12 6 3 13 10 10 14 9 1 15 14 7 16 15 5 17 10 1 18 14 9 19 12 8 20 18 10 21 10 9 22 12 7 23 14 9 24 15 5 25 15 2 26 20 4 27 19 10 28 17 8 29 16 8 30 24 10 31 17 2 32 28 7 33 27 8 34 21 4 35 28 7 36 22 4 37 18 6 38 27 6 3...
output:
Incorrect. Returned -1, Expected 11.
Subtask #4:
score: 0
Skipped
Dependency #1:
0%