답안 #250378

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
250378 2020-07-17T16:08:15 Z tutis File Paths (BOI15_fil) C++17
0 / 100
594 ms 109180 KB
/*input
2 4 22
2
0 1
1 5
2 13
2 10
1 4
0 7

*/
#pragma GCC optimize ("O3")
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
using namespace std;
typedef long long ll;
typedef long double ld;
vector<int>dal[1000001];
bitset<100000000>aaa;
bitset<100000000>bbb;
int main()
{
	ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0), cerr.tie(0);
	for (int i = 1; i <= 1000; i++)
		for (int j = i * i; j <= 1000000; j += i)
			dal[j].push_back(i);
	int n, m, k, s;
	cin >> n >> m >> k >> s;
	s++;
	ll p[n + 1], d[n + 1], l[n + 1];
	p[0] = -1;
	d[0] = 1;
	vector<int>D = {1};
	for (int i = 1; i <= n; i++)
	{
		cin >> p[i] >> l[i];
		d[i] = d[p[i]] + 1 + l[i];
		D.push_back(d[i]);
	}
	vector<ll>cikl;
	for (int i = 0; i <= n; i++)
	{
		for (int j = i; j != -1; j = p[j])
		{
			ll x = j + ((d[i] - d[j] + s) << 20);
			aaa[x % 100000000] = true;
			bbb[x % 99999999] = true;
		}
	}
	sort(D.begin(), D.end());
	sort(cikl.begin(), cikl.end());
	function<bool(int, ll)>ok = [&](int v, ll ilg)
	{
		if (d[v] == ilg)
			return true;
		if (ilg <= 0)
			return false;
		if (v != 0 && ok(p[v], ilg - 1 - l[v]))
			return true;
		if (ilg - s >= 1 && binary_search(D.begin(), D.end(), ilg - s))
			return true;
		if (ilg <= d[v] + s)
			return false;
		ilg -= d[v];
		for (ll c : dal[ilg])
		{
			ll x1 = v + (c << 20);
			ll x2 = v + ((ilg / c) << 20);
			if (aaa[x1 % 100000000] && bbb[x1 % 99999999])
				return true;
			if (aaa[x2 % 100000000] && bbb[x2 % 99999999])
				return true;
		}
		return false;
	};
	while (m--)
	{
		int p, l;
		cin >> p >> l;
		if (ok(p, k - l))
			cout << "YES\n";
		else
			cout << "NO\n";
	}
}
# 결과 실행 시간 메모리 Grader output
1 Correct 543 ms 86032 KB Output is correct
2 Correct 532 ms 89464 KB Output is correct
3 Correct 551 ms 92408 KB Output is correct
4 Correct 594 ms 109072 KB Output is correct
5 Correct 559 ms 109176 KB Output is correct
6 Correct 551 ms 104696 KB Output is correct
7 Incorrect 573 ms 109180 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 561 ms 104824 KB Output is correct
2 Correct 561 ms 104056 KB Output is correct
3 Correct 576 ms 104056 KB Output is correct
4 Incorrect 573 ms 104696 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 543 ms 86032 KB Output is correct
2 Correct 532 ms 89464 KB Output is correct
3 Correct 551 ms 92408 KB Output is correct
4 Correct 594 ms 109072 KB Output is correct
5 Correct 559 ms 109176 KB Output is correct
6 Correct 551 ms 104696 KB Output is correct
7 Incorrect 573 ms 109180 KB Output isn't correct
8 Halted 0 ms 0 KB -