Submission #64115465
Source Code Expand
Copy
#include <stdio.h>#include <stdlib.h>int cmp_int(const void* x, const void* y) {int a = *(const int*)x, b = *(const int*)y;return a < b ? -1 : a > b;}int ec[212345], *es[212345];void ae(int f, int t) {es[f] = realloc(es[f], sizeof(*es[f]) * (ec[f] + 1));if (es[f] == NULL) exit(2);es[f][ec[f]++] = t;}struct syourai_s {int to_node;int res;};
#include <stdio.h> #include <stdlib.h> int cmp_int(const void* x, const void* y) { int a = *(const int*)x, b = *(const int*)y; return a < b ? -1 : a > b; } int ec[212345], *es[212345]; void ae(int f, int t) { es[f] = realloc(es[f], sizeof(*es[f]) * (ec[f] + 1)); if (es[f] == NULL) exit(2); es[f][ec[f]++] = t; } struct syourai_s { int to_node; int res; }; /* 最大頂点数の降順 */ int cmp_syourai(const void* x, const void* y) { struct syourai_s a = *(const struct syourai_s*)x, b = *(const struct syourai_s*)y; return a.res > b.res ? -1 : a.res < b.res; } struct syourai_s* syourai[212345]; int *memo[212345]; int get_idx(const int* table, int table_num, int query) { int l = 0,r = table_num - 1; while (l <= r) { int m = l + (r - l) / 2; if (table[m] == query) return m; else if (table[m] < query) l = m + 1; else r = m - 1; } return table_num; } int calc(int node, int from) { int *pmemo = &memo[node][get_idx(es[node], ec[node], from)]; int i; int ans = 1, cnt = 0, cnt_needed = 3 + (from <= 0); if (*pmemo) return ~*pmemo; if (syourai[node] == NULL) { /* 来た元以外について、頂点数の最大値を求める */ syourai[node] = malloc(sizeof(*syourai[node]) * ec[node]); for (i = 0; i < ec[node]; i++) { syourai[node][i].to_node = es[node][i]; if (es[node][i] == from) { syourai[node][i].res = -1; } else { syourai[node][i].res = calc(es[node][i], node); } } qsort(syourai[node], ec[node], sizeof(*syourai[node]), cmp_syourai); } else if (syourai[node][ec[node] - 1].res < 0 && from != syourai[node][ec[node] - 1].to_node) { /* 欠けているデータを埋める */ syourai[node][ec[node] - 1].res = calc(syourai[node][ec[node] - 1].to_node, node); qsort(syourai[node], ec[node], sizeof(*syourai[node]), cmp_syourai); } /* 来た元以外から、必要な分データを多い順に取る */ for (i = 0; i < ec[node]; i++) { if (syourai[node][i].to_node != from) { ans += syourai[node][i].res; cnt++; if (cnt >= cnt_needed) break; } } /* データが足りない場合、最初の場合失格、そうでない場合その頂点だけを使う */ if (cnt < cnt_needed) ans = from > 0; return ~(*pmemo = ~ans); } int main(void) { int N; int i; int ans = 0; if (scanf("%d", &N) != 1) return 1; for (i = 1; i < N; i++) { int A, B; if (scanf("%d%d", &A, &B) != 2) return 1; ae(A, B); ae(B, A); } for (i = 1; i <= N; i++) { if (ec[i] > 0) qsort(es[i], ec[i], sizeof(*es[i]), cmp_int); memo[i] = calloc(ec[i] + 1, sizeof(*memo[i])); } for (i = 1; i <= N; i++) { int candidate = calc(i, 0); if (candidate > ans) ans = candidate; } printf("%d\n", ans - (ans == 0)); return 0; }
Submission Info
Submission Time | |
---|---|
Task | F - Alkane |
User | mikecat |
Language | C (gcc 12.2.0) |
Score | 500 |
Code Size | 2817 Byte |
Status | AC |
Exec Time | 155 ms |
Memory | 39952 KB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 500 / 500 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | sample00.txt, sample01.txt, sample02.txt |
All | hand00.txt, hand01.txt, hand02.txt, hand03.txt, sample00.txt, sample01.txt, sample02.txt, testcase00.txt, testcase01.txt, testcase02.txt, testcase03.txt, testcase04.txt, testcase05.txt, testcase06.txt, testcase07.txt, testcase08.txt, testcase09.txt, testcase10.txt, testcase11.txt, testcase12.txt, testcase13.txt, testcase14.txt, testcase15.txt, testcase16.txt, testcase17.txt, testcase18.txt, testcase19.txt, testcase20.txt, testcase21.txt, testcase22.txt, testcase23.txt, testcase24.txt, testcase25.txt, testcase26.txt, testcase27.txt, testcase28.txt, testcase29.txt, testcase30.txt, testcase31.txt, testcase32.txt, testcase33.txt, testcase34.txt, testcase35.txt, testcase36.txt, testcase37.txt, testcase38.txt, testcase39.txt, testcase40.txt, testcase41.txt, testcase42.txt, testcase43.txt, testcase44.txt, testcase45.txt, testcase46.txt, testcase47.txt, testcase48.txt, testcase49.txt, testcase50.txt, testcase51.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
hand00.txt | AC | 1 ms | 1620 KB |
hand01.txt | AC | 1 ms | 1644 KB |
hand02.txt | AC | 0 ms | 1640 KB |
hand03.txt | AC | 0 ms | 1748 KB |
sample00.txt | AC | 0 ms | 1616 KB |
sample01.txt | AC | 0 ms | 1644 KB |
sample02.txt | AC | 1 ms | 1672 KB |
testcase00.txt | AC | 0 ms | 1760 KB |
testcase01.txt | AC | 1 ms | 1748 KB |
testcase02.txt | AC | 0 ms | 1736 KB |
testcase03.txt | AC | 1 ms | 1748 KB |
testcase04.txt | AC | 102 ms | 24672 KB |
testcase05.txt | AC | 130 ms | 26900 KB |
testcase06.txt | AC | 38 ms | 11312 KB |
testcase07.txt | AC | 129 ms | 26908 KB |
testcase08.txt | AC | 37 ms | 11060 KB |
testcase09.txt | AC | 110 ms | 27024 KB |
testcase10.txt | AC | 46 ms | 15000 KB |
testcase11.txt | AC | 125 ms | 32600 KB |
testcase12.txt | AC | 54 ms | 15232 KB |
testcase13.txt | AC | 123 ms | 26920 KB |
testcase14.txt | AC | 95 ms | 21932 KB |
testcase15.txt | AC | 134 ms | 26860 KB |
testcase16.txt | AC | 104 ms | 25328 KB |
testcase17.txt | AC | 124 ms | 26900 KB |
testcase18.txt | AC | 121 ms | 26848 KB |
testcase19.txt | AC | 116 ms | 26904 KB |
testcase20.txt | AC | 59 ms | 16360 KB |
testcase21.txt | AC | 130 ms | 26848 KB |
testcase22.txt | AC | 79 ms | 27748 KB |
testcase23.txt | AC | 131 ms | 39952 KB |
testcase24.txt | AC | 116 ms | 24680 KB |
testcase25.txt | AC | 122 ms | 25804 KB |
testcase26.txt | AC | 60 ms | 15092 KB |
testcase27.txt | AC | 135 ms | 25964 KB |
testcase28.txt | AC | 112 ms | 24372 KB |
testcase29.txt | AC | 128 ms | 25988 KB |
testcase30.txt | AC | 104 ms | 23112 KB |
testcase31.txt | AC | 131 ms | 25956 KB |
testcase32.txt | AC | 62 ms | 15420 KB |
testcase33.txt | AC | 124 ms | 26636 KB |
testcase34.txt | AC | 24 ms | 7548 KB |
testcase35.txt | AC | 130 ms | 26536 KB |
testcase36.txt | AC | 60 ms | 14268 KB |
testcase37.txt | AC | 139 ms | 26644 KB |
testcase38.txt | AC | 78 ms | 17020 KB |
testcase39.txt | AC | 155 ms | 26536 KB |
testcase40.txt | AC | 113 ms | 22312 KB |
testcase41.txt | AC | 139 ms | 26648 KB |
testcase42.txt | AC | 49 ms | 12708 KB |
testcase43.txt | AC | 145 ms | 26640 KB |
testcase44.txt | AC | 100 ms | 22644 KB |
testcase45.txt | AC | 145 ms | 26624 KB |
testcase46.txt | AC | 45 ms | 12376 KB |
testcase47.txt | AC | 132 ms | 26636 KB |
testcase48.txt | AC | 32 ms | 9324 KB |
testcase49.txt | AC | 137 ms | 26544 KB |
testcase50.txt | AC | 123 ms | 25468 KB |
testcase51.txt | AC | 116 ms | 26624 KB |