제출 #1136377

#제출 시각아이디문제언어결과실행 시간메모리
1136377domblyTourism (JOI23_tourism)C++20
10 / 100
5092 ms25324 KiB
#include <bits/stdc++.h> #define int long long #define pb push_back #define F first #define S second using namespace std; const int N = 1e5 + 10; const int mod = 1e9 + 7; const int inf = 1e9; const int LOG = 20; int in[N],out[N],up[N][LOG],timer = 0,a[N],c[N]; vector<int>g[N]; void Dfs(int x,int par) { in[x] = ++timer; up[x][0] = par; for(int j = 1; j < LOG; j++) up[x][j] = up[up[x][j - 1]][j - 1]; for(int j : g[x]) { if(j != par) { Dfs(j,x); } } out[x] = timer; } void dfs(int x,int par) { for(int j : g[x]) { if(j != par) { dfs(j,x); a[x] += a[j]; } } } bool In(int u,int v) { return in[u] <= in[v] && out[u] >= out[v]; } int LCA(int u,int v) { if(In(u,v)) return u; if(In(v,u)) return v; for(int j = LOG - 1; j >= 0; j--) { if(up[u][j] > 0 && !In(up[u][j],v)) u = up[u][j]; } return up[u][0]; } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n,m,q; cin >> n >> m >> q; for(int i = 1; i < n; i++) { int u,v; cin >> u >> v; g[u].pb(v); g[v].pb(u); } Dfs(1,0); for(int i = 1; i <= m; i++) cin >> c[i]; while(q--) { int l,r; cin >> l >> r; if(r - l == 0) { cout << 1 << "\n"; continue; } for(int i = 1; i <= n; i++) a[i] = 0; for(int i = l; i < r; i++) { a[c[i]]++; a[c[i + 1]]++; a[up[LCA(c[i],c[i + 1])][0]] -= 2; } dfs(1,0); int ans = 0; for(int i = 1; i <= n; i++) if(a[i]) ans++; cout << ans << "\n"; } return 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...