Submission #1270580

#TimeUsernameProblemLanguageResultExecution timeMemory
1270580nathan4690File Paths (BOI15_fil)C++20
100 / 100
176 ms5628 KiB
#include <bits/stdc++.h> #define ll long long #define ld long double #define f1(i,n) for(int i=1;i<=n;i++) #define __file_name "btoi15p4" using namespace std; const ll maxn = 1e6+5, inf=1e18; int n, m, k, s, p[maxn], len[maxn]; bool ok[maxn]; bool jmp[maxn]; int cyc[maxn]; vector<int> G[maxn]; void dfs1(int u, int totl){ totl += len[u] + (u != 0); if(totl <= k && u <= n) { jmp[totl] = true; // cout << "! " << u << ' ' << totl << '\n'; } for(int c: G[u]){ if(c <= n){ dfs1(c, totl); } } } void add(int u, int totl, int val){ // totl += len[u] + (u != 0); if(u <= n){ // if(val > 0) cerr << "+ " << u << ' ' << totl + s + 1 << '\n'; // else cerr << "- " << u << ' ' << totl + s + 1 << '\n'; if(totl + s + 1 <= k) cyc[totl + s + 1] += val; } for(int c: G[u]){ add(c, totl + len[c] + 1, val); } } void dfs2(int u, int totl){ totl += len[u] + (u != 0); if(u > n){ if(totl == k) return void(ok[u - n] = 1); int v = u, clen = 0; while(v){ clen += len[v] + 1; // if(u == n + 6) cerr << v << ' ' << len[v] + 1 << '\n'; if(clen > k) break; if(jmp[k - clen]) return void(ok[u - n] = 1); v = p[v]; } if(totl > k) return; int totcyc = k - totl; // if(u == n + 6){ // cerr << totl << ' ' << totcyc << '\n'; // f1(i, totcyc){ // if(cyc[i]) cerr << "! " << i << '\n'; // } // } for(int i=1;i*i<=totcyc;i++){ if(totcyc % i == 0){ if(cyc[i] || cyc[totcyc / i]) return void(ok[u - n] = 1); } } return; } add(u, 0, 1); for(int c: G[u]){ dfs2(c, totl); } add(u, 0, -1); } int main(){ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); if(fopen(__file_name ".inp", "r")){ freopen(__file_name ".inp","r",stdin); freopen(__file_name ".out","w",stdout); } // code here cin >> n >> m >> k >> s; f1(i,n){ int par, l; cin >> par >> l; p[i] = par; len[i] = l; G[par].push_back(i); } f1(i,m){ int par, l; cin >> par >> l; p[i+n] = par; len[i+n] = l; G[par].push_back(i+n); } dfs1(0, s + 1); cyc[s + 1] = 1; dfs2(0, 0); f1(i,m) cout << (ok[i] ? "YES" : "NO") << '\n'; return 0; }

Compilation message (stderr)

fil.cpp: In function 'int main()':
fil.cpp:78:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   78 |         freopen(__file_name ".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fil.cpp:79:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   79 |         freopen(__file_name ".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...