QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#70009#2113. Zbalansowane słowaQingyuCompile Error//C++983.8kb2023-01-06 20:10:102023-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
  • [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: ...