# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
44647 | RayaBurong25_1 | File Paths (BOI15_fil) | C++17 | 1084 ms | 122124 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <stdio.h>
#include <vector>
#include <algorithm>
typedef struct edge edge;
struct edge
{
int v, w;
};
std::vector<edge> AdjList[3005];
std::vector<int> QS[3005];
int Sum[3005];
void dfs(int u, int pa, int sum)
{
// printf("dfs %d %d %d\n", u, pa, sum);
int i, v, s = AdjList[u].size();
QS[u] = QS[pa];
QS[u].push_back(sum);
Sum[u] = sum;
for (i = 0; i < s; i++)
{
v = AdjList[u][i].v;
if (v != pa)
dfs(v, u, sum + AdjList[u][i].w);
}
}
std::vector<int> F[1000005];
int main()
{
int n, m, k;
scanf("%d %d %d", &n, &m, &k);
k--;
int i, j, r, kk;
F[1].push_back(1);
for (i = 2; i <= k; i++)
{
r = i;
for (j = 2; j*j <= i; j++)
{
if (i%j == 0)
{
r /= j;
break;
}
}
if (j*j > i)
{
F[i].push_back(1);
F[i].push_back(i);
}
else
{
for (kk = 0; kk < F[r].size(); kk++)
{
F[i].push_back(F[r][kk]);
F[i].push_back(F[r][kk]*j);
}
std::sort(F[i].begin(), F[i].end());
F[i].resize(std::unique(F[i].begin(), F[i].end()) - F[i].begin());
}
// printf("%d = %d\n", i, F[i].size());
}
int s;
scanf("%d", &s);
s++;
int pa, w;
for (i = 1; i <= n; i++)
{
scanf("%d %d", &pa, &w);
AdjList[i].push_back({pa, w + 1});
AdjList[pa].push_back({i, w + 1});
}
dfs(0, 0, 0);
int l, p, q;
int mark;
for (i = 0; i < m; i++)
{
scanf("%d %d", &pa, &l);
kk = k - l - Sum[pa];
mark = 0;
// printf("kk%d\n", kk);
if (kk == 0)
{
printf("YES\n");
continue;
}
for (j = 0; j < F[kk].size(); j++)
{
r = kk/F[kk][j] - s;
if (r < 0) break;
// printf("r%d\n", r);
for (p = QS[pa].size() - 1; QS[pa][p] >= r; p--)
{
q = std::lower_bound(QS[pa].begin(), QS[pa].end(), r - QS[pa][p]) - QS[pa].begin();
if (QS[pa][q] == r - QS[pa][p])
{
printf("YES\n");
mark = 1;
break;
}
}
if (mark)
break;
}
if (!mark)
printf("NO\n");
}
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |