Submission #1172082

#TimeUsernameProblemLanguageResultExecution timeMemory
1172082LudisseyFile Paths (BOI15_fil)C++20
0 / 100
9 ms9280 KiB
#include <bits/stdc++.h> #define int long long #define sz(a) (int)a.size() #define all(a) a.begin(),a.end() #define rall(a) a.rbegin(),a.rend() using namespace std; vector<vector<int>> child; vector<int> depth; vector<int> a; vector<int> f; vector<int> parent; vector<int> file; vector<int> dv; vector<vector<int>> divs; vector<pair<int,int>> it; int n,m,k,s; int in=0; int c=1; void prep(int x, int d){ d+=a[x]; depth[x]=d; if(x>=n-m) { file.push_back(x); in++; } else it[x].first=in; for (auto u : child[x]) prep(u,d); if(x<n-m) it[x].second=in; } void findSUM(int x, int d){ if(x>=n-m) return; if(d>k) return; dv[d]=c; for (auto u : child[x]) findSUM(u,d+a[u]); if(sz(child[x])==0) dv[d+a[x]]=c; } void dfs(int x){ if(x>=n-m) return; for (auto u : child[x]) dfs(u); c++; findSUM(x,s); for (int i = it[x].first; i <= it[x].second; i++) { if(f[file[i]]) continue; for (auto u : divs[file[i]]) { if(dv[u]==c) { f[file[i]]=true; break; } } } } signed main() { cin >> n >> m >> k >> s; n+=m+1; depth.resize(n); dv.resize(k+1,0); divs.resize(n); child.resize(n); f.resize(n); it.resize(n); f.resize(n); a.resize(n); parent.resize(n); s++; for (int i = 1; i < n; i++) { int p; cin >> p>> a[i]; a[i]++; child[p].push_back(i); parent[i]=p; } a[0]=0; parent[0]=-1; prep(0,0); for (int i = n-m; i < n; i++) { int x=k-depth[i]; if(x<=0) continue; for (int j = 1; j <= sqrt(x); j++) { if(x%j==0){ divs[i].push_back(j); if(x/j!=j) divs[i].push_back(x/j); } } } dfs(0); c++; for (int i = 0; i < n-m; i++) { if(depth[i]+s>k) continue; dv[depth[i]+s]=c; } for (int i = n-m; i < n; i++){ int u=parent[i]; if(depth[i]==k) f[i]=true; while(u>-1){ int x=depth[i]-depth[u]; int v=k-x; if(v>=0&&dv[v]==c) f[i]=true; u=parent[u]; } } for (int i = n-m; i < n; i++) { if(f[i]) cout << "YES\n"; else cout << "NO\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...