QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#270675 | #2002. Race | LeticiaFCS | 0 | 0ms | 0kb | C++17 | 1.8kb | 2023-12-01 11:14:53 | 2023-12-01 11:14:53 |
answer
#include<bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;
int n, k;
pii path[200005];
vector<pii> g[200005];
bool vis[200005];
int mini[200005];
int ans, inf;
int dfs(int u, int p){
pii child = {0, u};
int sub = 0;
for(auto [l, v] : g[u]){
if(vis[v] || v == p) continue;
int cur = dfs(v, u);
sub += cur;
child = max<pii>(child, {cur, v});
}
path[u] = child;
return sub;
}
vector<pii> cur;
void dist(int u, int p, int prof, int edges){
if(prof > k || edges >= ans) return;
int comp = k - prof;
if(comp >= 0)
ans = min(ans, edges + mini[comp]);
cur.emplace_back(prof, edges);
for(auto [l, v] : g[u]){
if(vis[v] || v == p) continue;
dist(v, u, prof + l, edges + 1);
}
}
vector<pii> child;
void decomp(int u){
int sub = dfs(u, u);
int c = u;
while(path[c].first > sub/2) c = path[c].second;
vis[c] = true;
child.clear();
cur.reserve(sub);
for(auto [l, v] : g[c]){
cur.clear();
dist(v, c, l, 1);
child.insert(child.end(), cur.begin(), cur.end());
for(auto [prof, edges] : cur)
mini[prof] = min(mini[prof], edges);
}
for(auto [prof, edges] : child)
mini[prof] = inf;
for(auto [l, v] : g[c])
if(!vis[v])
decomp(v);
}
int best_path(int N,int K,int H[][2], int L[]){
inf = ans = 2000005;
n = N;
k = K;
for(int i = 0; i < inf; i++) mini[i] = inf;
mini[0] = 0;
for(int i = 0; i + 1 < n; i++){
int u = H[i][0], v = H[i][1], c = L[i];
g[u].emplace_back(c, v);
g[v].emplace_back(c, u);
}
decomp(0);
if(ans >= inf) ans = -1;
return ans;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 0
Runtime Error
Test #1:
score: 0
Runtime Error
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:
Unauthorized output
Subtask #2:
score: 0
Skipped
Dependency #1:
0%
Subtask #3:
score: 0
Runtime Error
Test #39:
score: 0
Runtime Error
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:
Unauthorized output
Subtask #4:
score: 0
Skipped
Dependency #1:
0%