이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <stdio.h>
#include <stdlib.h>
#define N 6005
int n_, s, n, m, k, m_, par[N], *eh[N], eo[N], dep[N], chain[N], o;
int cc(const void *i, const void *j) {
return *(int*)i-*(int*)j;
}
void pus(int i, int j) {
int o = eo[i]++;
if (!o) eh[i] = (int*)malloc(sizeof **eh * 2);
else if (0 == (o & o - 1)) eh[i] = (int*)realloc(eh[i], 2 * o * sizeof **eh);
eh[i][o] = j;
}
void efs(int u) {
dep[u] = 1e9;
for (int j = 0; j < eo[u]; j += 2) if (eh[u][j] != par[u])
efs(eh[u][j]);
}
void dfs(int u) {
for (int j = 0; j < eo[u]; j += 2) if (eh[u][j] != par[u]) {
int v = eh[u][j], l = eh[u][j+1];
dep[v] = l + dep[u];
if (dep[v] > k)
efs(v);
else
dfs(v);
}
}
int main(void) {
scanf("%d%d%d%d", &n, &m, &k, &s);
n_ = n;
m_ = m;
n = n + m;
++s;
for (int p, l, i = 1; i <= n; ++i) {
scanf("%d%d", &p, &l);
pus(par[i] = p, i);
pus(p, l + 1);
}
dfs(0);
/* sub 2 */
for (int i = n_ + 1; i <= n; ++i) {
if (dep[i] == k) {
puts("YES");
continue;
}
o = 0;
for (int cur = i; cur != 0; cur = par[cur])
if (cur <= n_)
chain[o++] = dep[i] - dep[cur];
chain[o++] = dep[i];
qsort(chain, o, sizeof *chain, cc);
for (int j = 1; j <= n_; ++j) {
int left = k - s - dep[j];
if (left > 0) {
int md, lb = 0, ub = o;
while (ub - lb > 1)
if (chain[md = lb + (ub - lb) / 2] <= left) lb = md;
else ub = md;
if (chain[lb] == left) {
puts("YES");
goto Next;
}
}
}
puts("NO");
Next:;
}
}
컴파일 시 표준 에러 (stderr) 메시지
fil.c: In function 'pus':
fil.c:15:24: warning: suggest parentheses around '-' in operand of '&' [-Wparentheses]
15 | else if (0 == (o & o - 1)) eh[i] = (int*)realloc(eh[i], 2 * o * sizeof **eh);
| ~~^~~
fil.c: In function 'main':
fil.c:37:3: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
37 | scanf("%d%d%d%d", &n, &m, &k, &s);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fil.c:44:5: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
44 | scanf("%d%d", &p, &l);
| ^~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |