Submission #250251

#TimeUsernameProblemLanguageResultExecution timeMemory
250251tutisFile Paths (BOI15_fil)C++17
33 / 100
1094 ms20472 KiB
/*input 2 4 22 2 0 1 1 5 2 13 2 10 1 4 0 7 */ #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; int main() { ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0), cerr.tie(0); int n, m, k, s; cin >> n >> m >> k >> s; s++; int p[n + 1], d[n + 1], l[n + 1]; p[0] = -1; d[0] = 1; for (int i = 1; i <= n; i++) { cin >> p[i] >> l[i]; d[i] = d[p[i]] + 1 + l[i]; } vector<int>cikl[n + 1]; for (int i = 0; i <= n; i++) { for (int j = i; j != -1; j = p[j]) { cikl[j].push_back(d[i] - d[j] + s); } } function<bool(int, int)>ok = [&](int v, int ilg) { if (d[v] == ilg) return true; if (ilg <= 0) return false; if (v != 0 && ok(p[v], ilg - 1 - l[v])) return true; for (int w = 0; w <= n; w++) { //w->v if (d[w] + s == ilg) return true; } if (ilg <= d[v]) return false; for (int x : cikl[v]) { if ((ilg - d[v]) % x == 0) return true; } return false; }; while (m--) { int p, l; cin >> p >> l; if (ok(p, k - l)) cout << "YES\n"; else cout << "NO\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...