QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#70009 | #2113. Zbalansowane słowa | Qingyu | Compile Error | / | / | C++98 | 3.8kb | 2023-01-06 20:10:10 | 2023-01-06 20:23:37 |
Judging History
This is the latest submission verdict.
- [2023-08-10 23:21:45]
- System Update: QOJ starts to keep a history of the judgings of all the submissions.
- [2023-01-06 20:23:37]
- Judged
- Verdict: Compile Error
- Time: 0ms
- Memory: 0kb
- [2023-01-06 20:10:10]
- Submitted
answer
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
constexpr int N = 1e5 + 10, B = 500, S = N / B * 10;
constexpr i64 inf = 1e18;
int n, all, rt, ts, sz[N], dfn[N], ans[N], vis[N], col[N];
i64 r[N], dis[N];
vector<pair<int, i64>> G[N];
vector<pair<int, int>> par[N];
vector<int> pos[N];
bitset<N> pre[S];
int tot;
struct Centroid {
vector<int> s, top;
vector<i64> f, dep;
vector<int> perm;
int n, rt, p;
int st;
void init(int u) {
rt = u, n = s.size();
f.resize(n), dep.resize(n), top.resize(n);
sort(s.begin(), s.end(), [&] (int x, int y) {return dis[x] < dis[y];});
for(int i = 0; i < n; i ++) {
f[i] = -inf, dep[i] = dis[s[i]], top[i] = col[s[i]];
par[s[i]].emplace_back(rt, i);
}
}
void getbitset() {
int cnt = perm.size() / B;
st = tot;
for(int i = 1; i <= cnt; i ++) {
if(i > 1) pre[st + i] = pre[st + i - 1];
for(int j = (i - 1) * B; j < min(int(perm.size()), i * B); j ++) {
pre[st + i][perm[j]] = 1;
}
}
tot += cnt;
assert(tot + 10 < S);
}
void clear() {
p = 0;
}
}ds[N];
vector<int> id[N];
void findrt(int u, int par) {
int mx = 0; sz[u] = 1;
for(auto [v, w] : G[u]) if(!vis[v] && v != par) {
findrt(v, u);
sz[u] += sz[v];
mx = max(mx, sz[v]);
}
mx = max(mx, all - sz[u]);
if(2 * mx <= all) rt = u;
}
void dfs(int u, int par, int c, vector<int> &s) {
s.emplace_back(u);
for(auto [v, w] : G[u]) if(v != par && !vis[v]) {
dis[v] = dis[u] + w, col[v] = c ? c : v;
dfs(v, u, col[v], s);
}
}
void build(int u) {
vis[u] = 1; dis[u] = 0, col[u] = 0;
dfs(u, u, 0, ds[u].s);
ds[u].init(u);
dfn[++ ts] = u;
for(auto [v, w] : G[u]) if(!vis[v]) {
findrt(v, u), rt = 0, all = sz[v], findrt(v, u), build(rt);
}
}
int main() {
// freopen("in.txt", "r", stdin);
ios::sync_with_stdio(false), cin.tie(0);
cin >> n;
for(int i = 1; i <= n; i ++) cin >> r[i];
for(int i = 1; i < n; i ++) {
int u, v; i64 w;
cin >> u >> v >> w;
G[u].emplace_back(v, w);
G[v].emplace_back(u, w);
}
all = n, findrt(1, 1);
int root = rt;
build(rt);
for(int i = n; i >= 1; i --) {
int u = dfn[i], m = ds[u].n;
for(auto v : ds[u].s) ds[v].clear();
static int id[N], use[N], ts = 0;
ts ++;
iota(id, id + m, 0);
ds[u].f[par[u].back().second] = 0;
for(i64 &x : ds[u].f) x = x >= 0 ? max(x, r[u]) : x;
for(int i = 0; i < m; i ++) col[ds[u].s[i]] = ds[u].top[i];
sort(id, id + m, [&] (int x, int y) {return ds[u].f[x] < ds[u].f[y];});
int dep = par[u].size() - 1;
vector<i64> w(dep, -inf);
function<void(Centroid&, i64)> relax;
auto &perm = ds[u].perm;
function<void(int)> remove = [&] (int u) {
use[u] = ts; perm.emplace_back(u);
for(int i = 0; i < dep; i ++) {
auto [x, id] = par[u][i];
w[i] = max(w[i], r[u] - ds[x].dep[id]);
}
for(int i = dep; i < par[u].size(); i ++) {
auto [x, id] = par[u][i];
relax(ds[x], r[u] - ds[x].dep[id]);
}
};
relax = [&] (Centroid &x, i64 w) {
while(x.p < x.n && x.dep[x.p] <= w) {
x.p ++;
if(use[x.s[x.p - 1]] != ts) {
remove(x.s[x.p - 1]);
}
}
};
for(int i = 0; i < m; i ++) {
int v = id[i], z = ds[u].s[v];
relax(ds[u], ds[u].f[v]);
for(int i = 0; i < dep; i ++) {
auto [x, id] = par[z][i];
ds[x].f[id] = max(ds[x].f[id], w[i]);
}
pos[z].emplace_back(ds[u].perm.size());
}
}
for(int i = 1; i <= n; i ++) {
ds[i].getbitset();
}
bitset<N> cur;
for(int i = 1; i <= n; i ++) {
reverse(pos[i].begin(), pos[i].end());
cur.reset();
for(int j = 0; j < par[i].size(); j ++) {
auto [x, id] = par[i][j];
int k = pos[i][j] - 1;
if(k >= B) cur |= pre[ds[x].st + k / B];
for(int lim = k / B * B; k >= lim; k --) cur[ds[x].perm[k]] = 1;
}
int ans = 0;
for(int i = 1; i <= n; i ++) if(cur[i]) ans ++;
cout << ans << '\n';
}
return 0;
}
详细
answer.code:3:7: error: expected nested-name-specifier before ‘i64’ 3 | using i64 = long long; | ^~~ answer.code:4:1: error: ‘constexpr’ does not name a type 4 | constexpr int N = 1e5 + 10, B = 500, S = N / B * 10; | ^~~~~~~~~ answer.code:4:1: note: C++11 ‘constexpr’ only available with ‘-std=c++11’ or ‘-std=gnu++11’ answer.code:5:1: error: ‘constexpr’ does not name a type 5 | constexpr i64 inf = 1e18; | ^~~~~~~~~ answer.code:5:1: note: C++11 ‘constexpr’ only available with ‘-std=c++11’ or ‘-std=gnu++11’ answer.code:6:24: error: ‘N’ was not declared in this scope 6 | int n, all, rt, ts, sz[N], dfn[N], ans[N], vis[N], col[N]; | ^ answer.code:6:32: error: ‘N’ was not declared in this scope 6 | int n, all, rt, ts, sz[N], dfn[N], ans[N], vis[N], col[N]; | ^ answer.code:6:40: error: ‘N’ was not declared in this scope 6 | int n, all, rt, ts, sz[N], dfn[N], ans[N], vis[N], col[N]; | ^ answer.code:6:48: error: ‘N’ was not declared in this scope 6 | int n, all, rt, ts, sz[N], dfn[N], ans[N], vis[N], col[N]; | ^ answer.code:6:56: error: ‘N’ was not declared in this scope 6 | int n, all, rt, ts, sz[N], dfn[N], ans[N], vis[N], col[N]; | ^ answer.code:7:1: error: ‘i64’ does not name a type 7 | i64 r[N], dis[N]; | ^~~ answer.code:8:18: error: ‘i64’ was not declared in this scope 8 | vector<pair<int, i64>> G[N]; | ^~~ answer.code:8:24: error: ‘G’ was not declared in this scope 8 | vector<pair<int, i64>> G[N]; | ^ answer.code:8:26: error: ‘N’ was not declared in this scope 8 | vector<pair<int, i64>> G[N]; | ^ answer.code:8:27: error: an array reference cannot appear in a constant-expression 8 | vector<pair<int, i64>> G[N]; | ^ answer.code:8:27: error: template argument 2 is invalid answer.code:8:8: error: template argument 1 is invalid 8 | vector<pair<int, i64>> G[N]; | ^~~~~~~~~~~~~~~~~~~~ answer.code:8:8: error: template argument 2 is invalid answer.code:9:21: error: ‘>>’ should be ‘> >’ within a nested template argument list 9 | vector<pair<int, int>> par[N]; | ^~ | > > answer.code:9:28: error: ‘N’ was not declared in this scope 9 | vector<pair<int, int>> par[N]; | ^ answer.code:10:17: error: ‘N’ was not declared in this scope 10 | vector<int> pos[N]; | ^ answer.code:11:8: error: ‘N’ was not declared in this scope 11 | bitset<N> pre[S]; | ^ answer.code:11:9: error: template argument 1 is invalid 11 | bitset<N> pre[S]; | ^ answer.code:11:15: error: ‘S’ was not declared in this scope 11 | bitset<N> pre[S]; | ^ answer.code:15:9: error: ‘i64’ was not declared in this scope 15 | vector<i64> f, dep; | ^~~ answer.code:15:12: error: template argument 1 is invalid 15 | vector<i64> f, dep; | ^ answer.code:15:12: error: template argument 2 is invalid answer.code: In member function ‘void Centroid::init(int)’: answer.code:21:5: error: request for member ‘resize’ in ‘((Centroid*)this)->Centroid::f’, which is of non-class type ‘int’ 21 | f.resize(n), dep.resize(n), top.resize(n); | ^~~~~~ answer.code:21:20: error: request for member ‘resize’ in ‘((Centroid*)this)->Centroid::dep’, which is of non-class type ‘int’ 21 | f.resize(n), dep.resize(n), top.resize(n); | ^~~~~~ answer.code: In lambda function: answer.code:22:55: error: ‘dis’ was not declared in this scope; did you mean ‘div’? 22 | sort(s.begin(), s.end(), [&] (int x, int y) {return dis[x] < dis[y];}); | ^~~ | div answer.code: In member function ‘void Centroid::init(int)’: answer.code:22:71: warning: lambda expressions only available with ‘-std=c++11’ or ‘-std=gnu++11’ 22 | sort(s.begin(), s.end(), [&] (int x, int y) {return dis[x] < dis[y];}); | ^ answer.code:22:72: error: no matching function for call to ‘sort(std::vector<int>::iterator, std::vector<int>::iterator, Centroid::init(int)::<lambda(int, int)>)’ 22 | sort(s.begin(), s.end(), [&] (int x, int y) {return dis[x] < dis[y];}); | ^ In file included from /usr/include/c++/9/algorithm:62, from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:65, from answer.code:1: /usr/include/c++/9/bits/stl_algo.h:4863:5: note: candidate: ...