QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#694136 | #7895. Graph Partitioning 2 | AlphaZe | WA | 309ms | 156968kb | C++20 | 3.4kb | 2024-10-31 17:19:09 | 2024-10-31 17:19:24 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
inline int read() {
int x = 0, f = 0; char ch = getchar();
while (!isdigit(ch)) f = ch == '-', ch = getchar();
while (isdigit(ch)) x = (x << 3) + (x << 1) + (ch ^ 48), ch = getchar();
return f ? -x : x;
}
const int N = 1e5 + 10, mod = 998244353;
void AddMod(int &p, int k) { p = (p + k) % mod; }
int n, K, M = 340;
int f[N][345], siz[N], tmp[345];
vector<int> g[N];
void dfs1(int x, int father) {
siz[x] = 1;
f[x][1] = 1;
for (auto y : g[x]) {
if (y == father) continue;
dfs1(y, x);
for (int i = 1; i <= K + 1; ++i) tmp[i] = 0;
for (int i = 1; i <= min(siz[x], K + 1); ++i) {
for (int j = 1; j <= min(siz[y], K + 1) && i + j <= K + 1; ++j) {
AddMod(tmp[i + j], 1ll * f[x][i] * f[y][j] % mod);
}
}
for (int i = 1; i <= min(siz[x], K + 1); ++i) {
AddMod(tmp[i], 1ll * f[x][i] * f[y][K] % mod);
AddMod(tmp[i], 1ll * f[x][i] * f[y][K + 1] % mod);
}
for (int i = 1; i <= K + 1; ++i) f[x][i] = tmp[i];
siz[x] += siz[y];
}
}
void dfs2(int x, int father) {
siz[x] = 1;
f[x][0] = 1;
for (auto y : g[x]) {
if (y == father) continue;
dfs2(y, x);
for (int i = 0; i <= n / K; ++i) tmp[i] = 0;
for (int i = 0; i <= siz[x] / K; ++i) {
for (int j = 0; j <= siz[y] / K; ++j) {
int lax = (siz[x] - i * K) % (K + 1);
int lay = (siz[y] - j * K) % (K + 1);
if (!lax) continue;
if (lax + lay <= K + 1) {
AddMod(tmp[i + j], 1ll * f[x][i] * f[y][j] % mod);
}
// if (lay == K) {
// AddMod(tmp[i + j + 1], 1ll * f[x][i] * f[y][j] % mod);
// }
}
}
// printf("x = %d, y = %d; \n", x, y);
for (int i = 0; i <= n / K; ++i) {
f[x][i] = tmp[i];
// printf("f[%d][%d] = %d; \n", x, i, f[x][i]);
}
siz[x] += siz[y];
for (int i = 0; i <= n / K; ++i) tmp[i] = f[x][i];
for (int i = 0; i <= siz[x] / K; ++i) {
int la = (siz[x] - i * K) % (K + 1);
if (la == K) AddMod(tmp[i + 1], f[x][i]);
}
for (int i = 0; i <= n / K; ++i) f[x][i] = tmp[i];
}
// printf("x = %d, f = ", x);
// for (int i = 0; i <= n / K; ++i) printf("%d ", f[x][i]); putchar('\n');
}
void solve1() {
dfs1(1, 0);
int ans = (f[1][K] + f[1][K + 1]) % mod;
printf("%d\n", ans);
for (int i = 1; i <= n; ++i) {
for (int k = 0; k <= K + 1; ++k) {
f[i][k] = 0;
}
}
}
void solve2() {
dfs2(1, 0);
int ans = 0;
for (int i = 0; i <= n / K; ++i) {
int la = (n - i * K) % (K + 1);
if (!la) AddMod(ans, f[1][i]);
}
for (int i = 1; i <= n; ++i) {
for (int k = 0; k <= n / K; ++k) {
f[i][k] = 0;
}
}
printf("%d\n", ans);
}
void work() {
n = read(); K = read();
for (int i = 1; i < n; ++i) {
int u = read(), v = read();
g[u].push_back(v); g[v].push_back(u);
}
if (K <= M)
solve1();
else
solve2();
for (int i = 1; i <= n; ++i) g[i].clear();
}
signed main() {
int Tt = read();
while (Tt--) work();
}
/*
K=2
1 1 0 0 0 siz=2
2 0
1 0 0 0 0 siz=1
1
*/
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 7940kb
input:
2 8 2 1 2 3 1 4 6 3 5 2 4 8 5 5 7 4 3 1 2 1 3 2 4
output:
2 1
result:
ok 2 lines
Test #2:
score: 0
Accepted
time: 20ms
memory: 8052kb
input:
5550 13 4 10 3 9 1 10 8 3 11 8 5 10 7 9 6 13 5 9 7 2 7 5 12 4 8 8 2 4 1 3 4 7 8 2 5 6 7 4 8 2 3 11 1 11 10 1 4 9 10 8 4 3 6 5 7 6 1 10 2 11 7 11 1 17 2 14 16 13 15 17 3 15 11 1 6 13 2 13 17 4 8 14 10 8 14 14 5 9 12 14 2 12 17 17 6 15 7 14 6 2 14 2 13 2 4 8 4 3 11 7 3 14 1 11 9 13 3 5 10 6 8 3 10 14 ...
output:
0 3 112 0 1 0 1 0 0 0 1 0 1 0 0 1 0 140 0 0 0 814 1 6 1 1 2 2 0 612 0 1 0 0 0 1 1 0 0 121 4536 0 0 1718 0 0 1 0 444 1 1908 1813 3 74 0 1 0 46 0 0 0 0 0 0 0 0 0 1 0 1 1 1 239 0 0 0 1 0 0 0 1 0 1 0 0 1 1 0 0 0 1 0 0 0 48 0 2 0 0 0 1 364 0 206 0 0 76 0 1 0 0 2 0 1 2 0 0 1 0 0 4 0 1 1 0 0 1 1 1 0 0 1 1 ...
result:
ok 5550 lines
Test #3:
score: 0
Accepted
time: 231ms
memory: 145048kb
input:
3 99990 259 23374 69108 82204 51691 8142 67119 48537 97966 51333 44408 33147 68485 21698 86824 15746 58746 78761 86975 58449 61819 69001 68714 25787 2257 25378 14067 64899 68906 29853 31359 75920 85420 76072 11728 63836 55505 43671 98920 77281 25176 40936 66517 61029 61440 66908 52300 92101 59742 69...
output:
259200 247 207766300
result:
ok 3 lines
Test #4:
score: 0
Accepted
time: 229ms
memory: 145052kb
input:
3 99822 332 11587 83046 63424 60675 63423 73718 74622 40130 5110 26562 28361 80899 30886 70318 8708 11068 34855 96504 7904 75735 31904 42745 87892 55105 82374 81319 77407 82147 91475 12343 13470 95329 58766 95716 83232 44156 75907 92437 69785 93598 47857 33018 62668 31394 24238 72675 98254 43583 180...
output:
315881300 4505040 185631154
result:
ok 3 lines
Test #5:
score: 0
Accepted
time: 87ms
memory: 145152kb
input:
3 99021 1000 41739 4318 72541 76341 31227 15416 49232 13808 50837 51259 74464 11157 92684 84646 95226 64673 74155 82511 33301 31373 5901 29318 38227 98893 96752 57411 35167 42401 24344 90803 6956 33753 51120 24535 29594 2646 70305 32961 93079 38070 49273 48987 62799 77986 94353 84447 74970 31546 263...
output:
917568 1 1213
result:
ok 3 lines
Test #6:
score: 0
Accepted
time: 43ms
memory: 144900kb
input:
3 100000 10000 15556 26349 14984 68012 43040 63434 32168 60646 70509 38559 26238 29031 45952 19431 29510 54395 5676 59515 28220 41438 46902 56640 8221 80059 77225 66558 17473 87324 20819 35098 29515 12641 84108 41157 11223 66562 25999 95852 3790 63605 20963 15799 217 58841 61619 13324 3406 60525 693...
output:
1 1 1
result:
ok 3 lines
Test #7:
score: 0
Accepted
time: 193ms
memory: 156968kb
input:
3 99969 79 84806 29026 76190 49303 81448 88606 47775 83229 7424 30063 75504 59640 28456 18012 26623 18383 66305 32640 55981 65140 25760 523 76248 13482 25598 55231 96844 17032 44892 64592 4915 50521 49879 86466 99286 20894 97915 76337 38424 2546 17489 46475 91791 2636 79283 35209 14773 60224 94096 5...
output:
855988479 413863362 390147247
result:
ok 3 lines
Test #8:
score: 0
Accepted
time: 309ms
memory: 154984kb
input:
3 99655 347 11149 99084 14300 87239 74978 75669 48703 12705 62600 62372 85743 67544 11248 36566 31920 23357 91970 67460 47599 56467 67521 16526 50284 63800 6701 3456 15660 81507 43192 5734 57965 67731 42676 26195 60309 19848 30504 47635 66455 98017 1645 70119 47861 95592 32453 39251 31178 59516 2144...
output:
500906609 4366296 91620762
result:
ok 3 lines
Test #9:
score: 0
Accepted
time: 131ms
memory: 155324kb
input:
3 99074 1000 10018 10926 93276 10882 57018 36456 36298 20551 34971 14671 82296 41279 49459 20897 56874 98633 57849 24888 15425 8116 62887 30467 61380 38308 70548 49238 49287 13456 83286 31072 93096 52396 17509 64864 75106 13508 26188 61092 74762 46749 78773 89071 57494 24130 29618 24192 21061 11372 ...
output:
895874645 85900584 237336
result:
ok 3 lines
Test #10:
score: 0
Accepted
time: 62ms
memory: 153688kb
input:
3 90006 10000 73490 30293 71611 45400 5985 73192 89192 86831 26722 13580 73 42029 64900 69699 1501 9326 5417 72489 81756 62830 19449 20243 85297 63347 30952 20243 69122 148 42880 88227 69343 66867 72919 75705 53663 32672 65715 35962 19421 5905 13102 4284 40894 88911 87558 21940 82573 82415 83203 131...
output:
84 3 1
result:
ok 3 lines
Test #11:
score: 0
Accepted
time: 153ms
memory: 151512kb
input:
3 99923 88 78033 17440 86489 72898 41036 84474 8561 18775 31676 62859 379 69955 66435 12651 7678 88259 64810 65776 30805 95902 81241 9085 22021 14554 26753 64229 59137 92000 90432 10825 80094 9597 7911 60599 66954 99719 81996 99136 42256 88131 73137 65163 97771 99132 66272 25651 80912 42272 94725 75...
output:
578738252 635410385 616515379
result:
ok 3 lines
Test #12:
score: 0
Accepted
time: 294ms
memory: 154872kb
input:
3 99773 362 16637 83914 63631 58741 27359 60161 8952 80795 52395 54853 26443 41008 37319 45707 47426 17039 26219 59547 19137 49086 14972 25115 76069 24037 26972 72363 92135 98301 86774 59913 54636 40038 88922 39806 62589 40377 94667 83663 23634 79618 24932 51069 15632 14476 73182 42535 98053 50141 2...
output:
718699462 887216138 726376429
result:
ok 3 lines
Test #13:
score: 0
Accepted
time: 117ms
memory: 150868kb
input:
3 99092 1000 49588 46079 55304 73177 18967 13059 52465 87314 78600 97324 69426 93208 93660 32936 1196 14888 79251 2603 82306 14847 7113 64862 2219 96349 68128 70861 42412 26436 3256 55313 13458 61469 6266 41279 75057 19685 88624 5001 3437 60451 32605 41073 72888 60159 26888 14135 18572 17170 11099 4...
output:
495088901 243801881 33
result:
ok 3 lines
Test #14:
score: 0
Accepted
time: 59ms
memory: 151532kb
input:
3 90000 10000 87964 18251 12687 18104 78011 37556 4983 29905 11284 20403 34250 81402 89508 6978 62519 18650 87412 74628 86526 88800 36368 38274 60311 25701 31660 13827 19031 84677 12557 49159 78925 43858 11560 86110 26994 87734 858 46385 85867 29897 62594 20009 50471 87109 77717 8190 71331 44932 570...
output:
1 1 1
result:
ok 3 lines
Test #15:
score: 0
Accepted
time: 304ms
memory: 151988kb
input:
3 99819 218 15128 87625 26894 97807 74349 83371 14774 10443 13261 31540 78090 53944 58055 19995 63820 64481 269 89813 80310 31087 98842 24345 32620 10612 58004 41547 86990 99489 8873 50122 9750 9895 16330 58033 72917 46097 90881 12042 98057 49196 17548 87122 66574 96602 36023 19215 19515 43934 14875...
output:
880185860 949287013 157116569
result:
ok 3 lines
Test #16:
score: -100
Wrong Answer
time: 212ms
memory: 154588kb
input:
3 99675 377 85617 1008 16957 5302 29036 43568 26644 73742 95538 87850 36434 95180 75521 95557 61327 7435 14918 15313 56136 58622 64335 13941 50507 27180 78582 32465 6420 87514 90207 73441 42230 45679 5442 18048 58968 83147 65534 19505 60549 90524 55605 21274 93589 24952 73182 3136 27000 73554 2566 8...
output:
466614967 536852506 17602
result:
wrong answer 1st lines differ - expected: '789159485', found: '466614967'