Submission #1000008

#TimeUsernameProblemLanguageResultExecution timeMemory
1000008NintsiChkhaidzeTourism (JOI23_tourism)C++17
10 / 100
5063 ms88552 KiB
#include <bits/stdc++.h> #define ll long long #define pb push_back #define s second #define f first #define pii pair <int,int> #define left h*2,l,(l + r)/2 #define right h*2+1,(l + r)/2 + 1,r #define int ll using namespace std; const int N = 3e5 + 5; vector <int> v[N]; int ans[N],ord[N],sz[N],heavy[N],head[N],tin[N]; int timer,d[25][N],dep[N],arr[N],n,m; vector <pii> qr[N]; void dfs(int x,int par){ d[0][x] = par; dep[x] = dep[par] + 1; sz[x] = 1; for (int to: v[x]){ if (to == par) continue; dfs(to,x); sz[x] += sz[to]; if (sz[to] > sz[heavy[x]]) heavy[x] = to; } } int lca(int x,int y){ if (dep[x] < dep[y]) swap(x,y); for (int i = 20; i >= 0; i--) if (dep[d[i][x]] >= dep[y]) x = d[i][x]; if (x == y) return x; for (int i = 20; i >= 0; i--) if (d[i][x] != d[i][y]) x = d[i][x],y = d[i][y]; return d[0][x]; } void dfs2(int x,int par,int h){ tin[x] = ++timer; head[x] = h; if (heavy[x]) dfs2(heavy[x],x,h); for (int to: v[x]){ if (to == par || to == heavy[x]) continue; dfs2(to,x,to); } } void addseg(int l,int r,int col){ for (int i = l; i <= r; i++) arr[i] = col; } int get(int x){ int cnt=0; for (int i = 1; i <= n; i++) cnt += (arr[i] >= x); return cnt; } void upd(int x,int y,int col){ int c = lca(x,y),cnt=0; while (head[x] != head[y]){ if (dep[head[x]] < dep[head[y]]) swap(x,y); addseg(tin[head[x]],tin[x],col); x = d[0][head[x]]; } if (dep[x] < dep[y]) swap(x,y); addseg(tin[y],tin[x],col); } signed main (){ ios_base::sync_with_stdio(0),cin.tie(NULL),cout.tie(NULL); int q; cin>>n>>m>>q; for (int i = 1; i < n; i++){ int a,b; cin>>a>>b; v[a].pb(b); v[b].pb(a); } dfs(1,1); dfs2(1,1,1); for (int i=1;i<=20;i++) for (int j=1;j<=n;j++) d[i][j] = d[i - 1][d[i - 1][j]]; for (int i = 1; i <= m; i++){ cin >> ord[i]; } for (int i = 1; i <= q; i++){ int l,r; cin>>l>>r; qr[r].pb({l,i}); } for (int i = 1; i <= m; i++){ if (i > 1) upd(ord[i - 1],ord[i],i-1); upd(ord[i],ord[i],i); for (auto [x,id]: qr[i]){ ans[id] = get(x); } } for (int i = 1; i <= q; i++) cout<<ans[i]<<endl; }

Compilation message (stderr)

tourism.cpp: In function 'void upd(long long int, long long int, long long int)':
tourism.cpp:68:9: warning: unused variable 'c' [-Wunused-variable]
   68 |     int c = lca(x,y),cnt=0;
      |         ^
tourism.cpp:68:22: warning: unused variable 'cnt' [-Wunused-variable]
   68 |     int c = lca(x,y),cnt=0;
      |                      ^~~
#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...