제출 #255759

#제출 시각아이디문제언어결과실행 시간메모리
255759islingr공장들 (JOI14_factories)C++17
컴파일 에러
0 ms0 KiB
#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; }

컴파일 시 표준 에러 (stderr) 메시지

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;
     ^~~