제출 #983146

#제출 시각아이디문제언어결과실행 시간메모리
983146vjudge1Cyberland (APIO23_cyberland)C++17
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> using namespace std; const long long NMAX = 1e5 + 5; vector<pair<long long,long long> > g[NMAX]; vector<long long> dis(NMAX); vector<vector<long long> > up(20, vector<long long>(NMAX)); vector<long long> ary(NMAX), tin(NMAX), tout(NMAX); long long ans, goal, timer; void precalc(long long v, long long p){ tin[v] = ++timer; up[0][v] = p; for(long long i = 1; i < 20; i++){ up[i][v] = up[i - 1][up[i - 1][v]]; } for(auto [to, cost] : g[v]){ if(to != p){ dis[to] = dis[v] + cost; precalc(to, v); } } tout[v] = ++timer; } bool upper (long long a, long long b) { return tin[a] <= tin[b] && tout[a] >= tout[b]; } long long lca (long long a, long long b) { if (upper (a, b)) return a; if (upper (b, a)) return b; for (long long i=19; i>=0; --i) if (! upper (up[i][a], b)) a = up[i][a]; return up[i][a]; } long long dist(long long a, long long b){ return dis[a] + dis[b] - dis[lca(a, b)] * 2; } void dfs(long long v, long long p){ if(v == goal) return; if(ary[v] == 0){ ans = min(ans, dist(v, goal)); } for(auto [to, cost] : g[v]){ if(to != p) dfs(to, v); } } double solve(int n, int m, int k, int h, std::vector<int> x, std::vector<int> y, std::vector<int> c, std::vector<int> arr) { for(long long i = 1; i <= n; i++){ g[i].clear(); dis[i] = 0; for(long long j = 0; j < 20; j++) up[j][i] = 0; tin[i] = 0; tout[i] = 0; timer = 0; } goal = h + 1; for(long long i = 0; i < m; i++){ g[x[i] + 1].push_back({y[i] + 1, c[i]}); g[y[i] + 1].push_back({x[i] + 1, c[i]}); } for(long long i = 0; i < n; i++){ ary[i + 1] = arr[i]; } precalc(1, 1); ans = dist(1, goal); dfs(1, -1); return ans; }

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

cyberland.cpp: In function 'long long int lca(long long int, long long int)':
cyberland.cpp:36:12: error: 'i' was not declared in this scope
   36 |  return up[i][a];
      |            ^