Submission #255759

# Submission time Handle Problem Language Result Execution time Memory
255759 2020-08-01T19:48:57 Z islingr Factories (JOI14_factories) C++17
Compilation error
0 ms 0 KB
#include <bits/stdc++.h>
using namespace std;
 
#define rep(i, a, b) for (auto i = (a); i < (b); ++i)
#define per(i, a, b) for (auto i = (b); i-- > (a); )
#define sz(x...) int((x).size())
#define all(x) begin(x), end(x)
#define eb(x...) emplace_back(x)
#define lb(x...) lower_bound(x)
 
template<class T> bool ckmin(T &a, const T &b) { return a > b ? a = b, 1 : 0; }
 
using ll = int64_t;
 
const ll inf = 1e18;
const int B = 19, N = 1 << B;
int dep[N], p[N][B], in[N];
ll dist[N];
 
void Init(int n, int a[], int b[], int d[]) {
	vector<vector<int>> g(n);
	rep(e, 0, n - 1) g[a[e]].eb(e), g[b[e]].eb(e);
	int timer = 0;
	function<void(int)> dfs = [](int u) {
		in[u] = timer++;
		for (int e : g[u]) {
			int v = u != a[e] ? a[e] : b[e];
			if (v == p[u][0]) continue;
			dist[v] = dist[u] + d[e];
			dep[v] = dep[u] + 1;
			p[v][0] = u;
			rep(j, 0, B - 1) p[v][j + 1] = p[p[v][j]][j];
			dfs(v);
		}
	};
	dfs(0);
}
 
int lca(int u, int v) {
	if (dep[u] < dep[v]) swap(u, v);
	per(j, 0, B) if (dep[v] <= dep[p[u][j]]) u = p[u][j];
	if (u == v) return u;
	per(j, 0, B) if (p[u][j] != p[v][j]) u = p[u][j], v = p[v][j];
	return p[u][0];
}
 
vector<int> g[N];
short col[N];
ll s[N], t[N];
 
ll Query(int S, int X[], int T, int Y[]) {
	vector<int> V; V.reserve(S + T);
	rep(i, 0, S) col[X[i]] = +1, V.eb(X[i]);
	rep(i, 0, T) col[Y[i]] = -1, V.eb(Y[i]);
	sort(all(V), [&](int x, int y) { return in[x] < in[y]; });
	rep(i, 1, S + T) V.eb(lca(V[i - 1], V[i]));
	sort(all(V), [&](int x, int y) { return in[x] < in[y]; });
	V.erase(unique(all(V)), end(V));
	rep(i, 1, sz(V)) g[lca(V[i - 1], V[i])].eb(V[i]);
	ll ans = inf;
	function<void(int)> dfs = [](int u) {
		s[u] = t[u] = inf;
		if (col[u] > 0) s[u] = 0;
		if (col[u] < 0) t[u] = 0;
		for (int v : g[u]) {
			dfs(v);
			ckmin(s[u], dist[v] - dist[u] + s[v]);
			ckmin(t[u], dist[v] - dist[u] + t[v]);
		}
		ckmin(ans, s[u] + t[u]);
	};
	dfs(V[0]);
	for (int v : V) g[v].clear(), col[v] = 0;
	return ans;
}

Compilation message

factories.cpp: In lambda function:
factories.cpp:25:11: error: 'timer' is not captured
   in[u] = timer++;
           ^~~~~
factories.cpp:24:29: note: the lambda has no capture-default
  function<void(int)> dfs = [](int u) {
                             ^
factories.cpp:23:6: note: 'int timer' declared here
  int timer = 0;
      ^~~~~
factories.cpp:26:16: error: 'g' is not captured
   for (int e : g[u]) {
                ^
factories.cpp:24:29: note: the lambda has no capture-default
  function<void(int)> dfs = [](int u) {
                             ^
factories.cpp:21:22: note: 'std::vector<std::vector<int> > g' declared here
  vector<vector<int>> g(n);
                      ^
factories.cpp:27:17: error: 'a' is not captured
    int v = u != a[e] ? a[e] : b[e];
                 ^
factories.cpp:24:29: note: the lambda has no capture-default
  function<void(int)> dfs = [](int u) {
                             ^
factories.cpp:20:24: note: 'int* a' declared here
 void Init(int n, int a[], int b[], int d[]) {
                        ^
factories.cpp:27:24: error: 'a' is not captured
    int v = u != a[e] ? a[e] : b[e];
                        ^
factories.cpp:24:29: note: the lambda has no capture-default
  function<void(int)> dfs = [](int u) {
                             ^
factories.cpp:20:24: note: 'int* a' declared here
 void Init(int n, int a[], int b[], int d[]) {
                        ^
factories.cpp:27:31: error: 'b' is not captured
    int v = u != a[e] ? a[e] : b[e];
                               ^
factories.cpp:24:29: note: the lambda has no capture-default
  function<void(int)> dfs = [](int u) {
                             ^
factories.cpp:20:33: note: 'int* b' declared here
 void Init(int n, int a[], int b[], int d[]) {
                                 ^
factories.cpp:29:24: error: 'd' is not captured
    dist[v] = dist[u] + d[e];
                        ^
factories.cpp:24:29: note: the lambda has no capture-default
  function<void(int)> dfs = [](int u) {
                             ^
factories.cpp:20:42: note: 'int* d' declared here
 void Init(int n, int a[], int b[], int d[]) {
                                          ^
factories.cpp:33:4: error: 'dfs' is not captured
    dfs(v);
    ^~~
factories.cpp:24:29: note: the lambda has no capture-default
  function<void(int)> dfs = [](int u) {
                             ^
factories.cpp:24:22: note: 'std::function<void(int)> dfs' declared here
  function<void(int)> dfs = [](int u) {
                      ^~~
factories.cpp: In lambda function:
factories.cpp:66:4: error: 'dfs' is not captured
    dfs(v);
    ^~~
factories.cpp:61:29: note: the lambda has no capture-default
  function<void(int)> dfs = [](int u) {
                             ^
factories.cpp:61:22: note: 'std::function<void(int)> dfs' declared here
  function<void(int)> dfs = [](int u) {
                      ^~~
factories.cpp:70:9: error: 'ans' is not captured
   ckmin(ans, s[u] + t[u]);
         ^~~
factories.cpp:61:29: note: the lambda has no capture-default
  function<void(int)> dfs = [](int u) {
                             ^
factories.cpp:60:5: note: 'll ans' declared here
  ll ans = inf;
     ^~~