Submission #764915

#TimeUsernameProblemLanguageResultExecution timeMemory
764915vjudge1Roadside Advertisements (NOI17_roadsideadverts)C++17
Compilation error
0 ms0 KiB
//Bismillahir-Rahmanir-Rahim # include <bits/stdc++.h> # define pb push_back # define ff first # define ss second # define nl "\n" # define sz(x) ((int)(x).size()) # define deb(x) cerr << #x << " = " << x << endl; # define pll pair <ll, ll> # define pii pair <int, int> typedef long long ll; typedef unsigned long long ull; typedef long double ld; const ll maxn = 5e4 + 2; const ll inf = 2e18 + 0; const ll mod = 1e9 + 7; const ll dx[] = {-1, 1, 0, 0}; const ll dy[] = {0, 0, -1, 1}; const ll P = 67; using namespace std; int n, q, timer; vector <pii> g[maxn]; int tin[maxn]; int tout[maxn]; int up[maxn][17]; int sum[maxn][17]; int d[maxn]; map <pii, int> mp; bool used[maxn]; int ww[maxn]; void dfs (int v = 1, int pa = 1) { up[v][0] = pa; d[v] = d[pa] + 1; tin[v] = ++timer; for (int j = 1; j <= 16; ++j) { up[v][j] = up[up[v][j - 1]][j - 1]; sum[v][j] = sum[v][j - 1] + sum[up[v][j - 1]][j - 1]; } for (pii it : g[v]) { int to = it.ff, w = it.ss; if (to == pa) continue; sum[to][0] = w; dfs(to, v); } tout[v] = timer; } bool anc (int u, int v) { return tin[u] <= tin[v] && tout[v] <= tout[u]; } pii lca (int u, int v) { if (d[u] < d[v]) swap(u, v); int k = d[u] - d[v]; int summ = 0; for (int j = 16; j >= 0; --j) { if (k & (1int << j)) { summ += sum[u][j]; u = up[u][j]; } } for (int j = 16; j >= 0; --j) { if (up[u][j] != up[v][j]) { summ += sum[u][j]; summ += sum[u][j]; u = up[u][j]; v = up[v][j]; } } return {up[v][0], summ}; } void ma1n (/* SABR */) { cin >> n; for (int i = 1; i < n; ++i) { int u, v; cin >> u >> v >> ww[i]; g[u].pb({v, ww[i]}); g[v].pb({u, ww[i]}); mp[{u, v}] = i; mp[{v, u}] = i; } dfs(); cin >> q; while (q--) { vector <int> v(5); for (int i = 0; i < 5; ++i) { cin >> v[i]; } int lc = lca(v[0], v[1]).ff; for (int i = 0; i < 5; ++i) { for (int j = i + 1; j < 5; ++j) { lc = lca(lc, lca(v[i], v[j]).ff).ff; } } memset(used, 0, sizeof used); for (int i = 0; i < 5; ++i) { int cur = v[i]; while (cur != lc) { used[mp[{cur, up[cur][0]}]] = 1; cur = up[cur][0]; } } int res = 0; for (int i = 1; i < n; ++i) { if (used[i]) { res += ww[i]; } } cout << res << nl; } } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); // freopen("file.in", "r", stdin); // freopen("file.out", "w", stdout); int ttt = 1; // cin >> ttt; for (int test = 1; test <= ttt; ++test) { // cout << "Case " << test << ":" << '\n'; ma1n(); } return 0; } // 998batrr | BbIWEJI 3A TObOU!!! // tourist | BbIWEJI 3A TObOU!!!

Compilation message (stderr)

roadsideadverts.cpp: In function 'std::pair<int, int> lca(int, int)':
roadsideadverts.cpp:70:18: error: unable to find numeric literal operator 'operator""int'
   70 |         if (k & (1int << j))
      |                  ^~~~
roadsideadverts.cpp:70:18: note: use '-fext-numeric-literals' to enable more built-in suffixes