QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#367981 | #7895. Graph Partitioning 2 | ucup-team1001 | WA | 43ms | 4204kb | C++23 | 3.1kb | 2024-03-26 17:52:21 | 2024-03-26 17:52:21 |
Judging History
answer
#include "bits/stdc++.h"
using namespace std;
#ifndef ONLINE_JUDGE
#include "test.h"
#include "dbg.h"
#else
#define debug(...) 42
#define debug_assert(...) 42
#endif
#define IOS ios::sync_with_stdio(0),cin.tie(0)
using ll = long long;
using ull = unsigned long long;
#define endl '\n'
#define int ll
using VI = vector<int>;
using VII = vector<VI>;
using PII = pair<int, int>;
const int inf = 1e18;
const int mod = 998244353;
void init() {
}
void solve() {
int n, k;
cin >> n >> k;
vector<int> ys(k + 10), nex(k + 10), val(k + 10);
VII mp(n + 1);
for (int i = 1; i < n; i++) {
int u, v;
cin >> u >> v;
mp[u].emplace_back(v);
mp[v].emplace_back(u);
}
function<vector<pair<int,int>>(int,int)> dfs = [&](int f,int l) {
vector<PII> dp = {{1, 1}};
int len = 0;
for (auto i: mp[l]) {
if (i == f)continue;
auto ans = dfs(l, i);
for (auto [l1,v1]: dp) {
for (auto [l2,v2]: ans) {
if (l1 + l2 <= k + 1) {
if (!ys[l1 + l2]) {
ys[l1 + l2] = len;
nex[len] = l1 + l2;
len++;
}
val[ys[l1 + l2]] = (val[ys[l1 + l2]] + (v1 * v2) % mod) % mod;
}
}
}
vector<PII> mdp;
for (int j = 0; j < len; j++) {
mdp.emplace_back(nex[j], val[j]);
val[j] = 0;
ys[nex[j]] = 0;
nex[j] = 0;
}
len = 0;
dp = mdp;
debug(l, i, dp);
}
int n0 = -1, nk = -1, nkk = -1;
for (int i = 0; i < dp.size(); i++) {
if (dp[i].first == 0) {
n0 = i;
}
else if (dp[i].first == k) {
nk = i;
}
else if (dp[i].first == k + 1) {
nkk = i;
}
}
if (nk != -1 || nkk != -1) {
if (n0 == -1) {
dp.emplace_back(0, 0);
n0 = dp.size() - 1;
}
if (nkk != -1) {
debug(1);
cerr << dp[nkk].second << endl;
}
dp[n0].second = (dp[n0].second + ((nk == -1)
? 0ll
: dp[nk].second) +
((nkk == -1)
? 0ll
: dp[nkk].second));
}
if (nkk != -1) {
swap(dp[nkk], dp.back());
dp.pop_back();
}
return dp;
};
auto ans = dfs(0, 1);
debug(ans);
for (auto [i,j]: ans) {
if (i == 0) {
cout << j << endl;
return;
}
}
cout << 0 << endl;
}
signed main() {
IOS;
init();
// debug(1);
int t = 1;
cin >> t;
while (t--) {
solve();
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3496kb
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: -100
Wrong Answer
time: 43ms
memory: 4204kb
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 64 0 1 0 1 0 0 0 1 0 1 0 0 1 0 84 0 0 0 150 1 6 1 1 2 2 0 171 0 1 0 0 0 1 1 0 0 35 900 0 0 561 0 0 1 0 144 1 852 400 3 28 0 1 0 24 0 0 0 0 0 0 0 0 0 1 0 1 1 1 99 0 0 0 1 0 0 0 1 0 1 0 0 1 1 0 0 0 1 0 0 0 40 0 2 0 0 0 1 171 0 81 0 0 44 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 1 1 1 0 3...
result:
wrong answer 3rd lines differ - expected: '112', found: '64'