Submission #953152

#TimeUsernameProblemLanguageResultExecution timeMemory
953152PM1File Paths (BOI15_fil)C++17
33 / 100
113 ms4952 KiB
#include <bits/stdc++.h> using namespace std; const int mxn=3e3+5,mxs=1e6+5; int n,m,s,k,par[mxn*2],dis[mxn*2]; vector<int>all,v[mxn*2]; int mark[mxs],ans[mxn*2]; void make(int x,bool y){ int z=x; while(x!=0){ x=par[x]; int d=dis[z]-dis[x]; if(d<=k)mark[d]=y; } } void dfs1(int z,int g,int x){ if(z>n) return ; x+=dis[z]-dis[par[z]]; if(x<mxs) mark[x]+=g; for(auto i:v[z]) dfs1(i,g,x); } void dfs(int z){ if(z>n){ int x=k-dis[z]; for(int i=1;i*i<=x;i++){ if(x%i==0 &&(mark[i] || mark[x/i]))ans[z]=1; } } dfs1(z,1,s); for(auto i:v[z]) dfs(i); dfs1(z,-1,s); } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n>>m>>k>>s; s++; dis[0]=1; for(int i=1;i<=n+m;i++){ int x,y; cin>>x>>y; par[i]=x; dis[i]=dis[x]+y; v[x].push_back(i); if(i<=n){ dis[i]++; all.push_back(dis[i]); } } all.push_back(1); for(int i=n+1;i<=n+m;i++){ make(i,1); if(dis[i]==k)ans[i]=1; for(auto j:all){ int res=k-j-s; if(res>=0 && mark[res])ans[i]=1; } make(i,0); } dfs(0); for(int i=n+1;i<=n+m;i++){ if(ans[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...