Submission #1090916

#TimeUsernameProblemLanguageResultExecution timeMemory
1090916underwaterkillerwhaleTourism (JOI23_tourism)C++17
10 / 100
313 ms36832 KiB
#include <bits/stdc++.h> #define ll long long #define pii pair<int,int> #define pll pair<ll,ll> #define rep(i,m,n) for(int i=(m); i<=(n); i++) #define reb(i,m,n) for(int i=(m); i>=(n); i--) #define iter(id, v) for(auto id : v) #define fs first #define se second #define MP make_pair #define pb push_back #define bit(msk, i) ((msk >> i) & 1) #define SZ(v) (ll)v.size() #define ALL(v) v.begin(),v.end() using namespace std; mt19937_64 rd(chrono :: steady_clock :: now ().time_since_epoch().count()); ll Rand (ll l, ll r) { return uniform_int_distribution<ll> (l, r) (rd); } const int N = 1e6 + 7; const int Mod = 1e9 + 2022; ///loonf mod sai const int INF = 1e9; const ll BASE = 137; const int szBL = 350; int n, m, Q; vector<int> ke[N]; pii qr[N]; int C[N]; int high[N], par[N][25]; void pdfs (int u, int p) { high[u] = high[p] + 1; par[u][0] = p; rep (i, 1, 20) par[u][i] = par[par[u][i - 1]][i - 1]; iter (&v, ke[u]) { if (v != p) { pdfs(v, u); } } } int LCA (int u, int v) { if (high[u] > high[v]) swap(u, v); rep (i, 0, 20) if (bit(high[v] - high[u], i)) v = par[v][i]; if (v == u) return v; reb (i, 20, 0) if (par[u][i] != par[v][i]) v = par[v][i], u = par[u][i]; return par[u][0]; } namespace sub2 { int pre[N]; void dfs (int u, int p, int &res) { iter (&v, ke[u]) { if (v != p) { dfs(v, u, res); pre[u] += pre[v]; } } if (pre[u] > 0) ++res; } void solution () { rep (q, 1, Q) { rep (i, 1, n) pre[i] = 0; int L = qr[q].fs, R = qr[q].se; int Lca = C[L]; rep (i, L, R) { Lca = LCA(Lca, C[i]); } rep (i, L, R) { pre[C[i]]++; pre[par[Lca][0]]--; } int res = 0; dfs(1, 0, res); cout << res <<"\n"; } } } void solution() { cin >> n >> m >> Q; rep (i, 1, n - 1) { int u, v; cin >> u >> v; ke[u].pb(v); ke[v].pb(u); } rep (i, 1, m) cin >> C[i]; rep (i, 1, Q) cin >> qr[i].fs >> qr[i].se; pdfs(1, 0); if (n <= 2000 && m <= 2000 && Q <= 2000) sub2 :: solution(); } #define file(name) freopen(name".inp","r",stdin); \ freopen(name".out","w",stdout); int main () { // file("c"); ios_base :: sync_with_stdio(false); cin.tie(0); cout.tie(0); int num_Test = 1; // cin >> num_Test; while (num_Test--) solution(); } /* no bug +8 chu y break hay return se lam hong logic xet transition cua i va i + 1 construct ket qua chu y truong hop : KHONG CO GI ko làm được hướng 1: đổi hướng làm hướng 2: đưa ra nhận xét 2 3 2 0 0 1 0 1 1 0 1 0 2 1 2 0 5 5 0 */

Compilation message (stderr)

tourism.cpp: In function 'int LCA(int, int)':
tourism.cpp:47:36: warning: suggest parentheses around '-' inside '>>' [-Wparentheses]
   47 |     rep (i, 0, 20) if (bit(high[v] - high[u], i)) v = par[v][i];
      |                            ~~~~~~~~^~~~~~~~~
tourism.cpp:12:27: note: in definition of macro 'bit'
   12 | #define bit(msk, i)     ((msk >> i) & 1)
      |                           ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...