QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#537124#7895. Graph Partitioning 2HHAZWA 27ms4124kbC++203.4kb2024-08-29 21:14:312024-08-29 21:14:32

Judging History

你现在查看的是最新测评结果

  • [2024-08-29 21:14:32]
  • 评测
  • 测评结果:WA
  • 用时:27ms
  • 内存:4124kb
  • [2024-08-29 21:14:31]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int,int>pii;
typedef pair<ll,ll>pll;
typedef pair<ld,ld>pdd;
typedef pair<ll, pair<ll, ll> > plpair;
typedef vector<int> vi;
typedef vector<ll> vl;
#define endl '\n'
#define rep(i, a, b) for (ll i = (a); i <= (b); ++i)
#define per(i, a, b) for(ll i = (a); i >= (b); --i)
#define debug(x) cout<<#x<<": "<<x<<endl
#define lowbit(id) id & (-id)
#define fi first
#define sec second
#define lc id<<1
#define rc id<<1|1
#define sz(x) (int)(x).size()
#define all(t) (t).begin(), (t).end()
#define meh {cout<<"NO"<<endl;return;}
#define yay {cout<<"YES"<<endl;return;}
#define vin(v) for(auto&x:v)cin>>x;
#define print(v) for (auto x: v)cout<<x<<' ';cout<<endl;
#define sqrt(x) sqrtl(x)
mt19937_64 rnd(chrono::steady_clock::now().time_since_epoch().count());
const ll N = 3e3 + 10;
const int mod = 998244353;

struct node{
	ll num;
	ll val;
};

void solve() {
	ll n, k;
	cin >> n >> k;
	vector<ll>ve[n + 5];
	vector<node>dp[n + 5];
	ll id[n + 5];
	memset(id, -1, sizeof(id));
	rep(i, 1, n - 1) {
		ll u, v;
		cin >> u >> v;
		ve[u].push_back(v);
		ve[v].push_back(u);
	}
	rep(i, 1, n) {
		dp[i].push_back({1, 1});
	}
	function<void(ll, ll)> dfs = [&](ll u, ll f) {
		for(ll v : ve[u]) {
			if(v != f) {
				dfs(v, u);
				vector<node>temp;
				ll tot = 0;
				for(node x : dp[u]) {
					for(node y : dp[v]) {
						ll num;
						if(x.num + y.num < k) {
							num = x.num + y.num;
							if(num && x.num == 0) continue;
							if(id[num] == -1) {
								id[num] = tot++;
								temp.push_back({num, 0});
							}
							temp[id[num]].val += (x.val * y.val) % mod;
							temp[id[num]].val %= mod;
						}
						else if(x.num + y.num == k) {
							num = 0;
							if(id[num] == -1) {
								id[num] = tot++;
								temp.push_back({num, 0});
							}
							temp[id[num]].val += (x.val * y.val) % mod;
							temp[id[num]].val %= mod;
							num = k;
							if(x.num == 0) continue;
							if(id[num] == -1) {
								id[num] = tot++;
								temp.push_back({num, 0});
							}
							temp[id[num]].val += (x.val * y.val) % mod;
							temp[id[num]].val %= mod;
						}
						else if(x.num + y.num == k + 1){
							num = x.num + y.num - k - 1;
							if(id[num] == -1) {
								id[num] = tot++;
								temp.push_back({num, 0});
							}
							temp[id[num]].val += (x.val * y.val) % mod;
							temp[id[num]].val %= mod;
						}
					}
				}
				dp[u] = temp;
				rep(i, 0, tot - 1) {
					id[temp[i].num] = -1;
				}
			}
		}
	};
	dfs(1, 0);
	ll ans = 0;
	for(node d : dp[1]) {
		if(d.num == 0) {
			ans = d.val;
		}
//		debug(d.num);
//		debug(d.val);
	}
	cout << ans << endl;
}

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int T = 1;
	cin >> T;
	//	cout.flush();
	//		ofstream outfile("C:\\Users\\86187\\OneDrive\\桌面\\1.txt");
	//		outfile << "a[1]=0;a[2]=1;";
	//		ll l = 1e7 + 1;
	//		rep(i, 3, 1e9) {
	//			printf("%lld\n", i);
	//			ll x = (i - 1) * ((a[i - 1] + a[i - 2]) % mod);
	//			x %= mod;
	//			if(i == l) {
	//				outfile << "a[" << i << "]=" << x << ";";
	//			}
	//			if(i == l + 1) {
	//				outfile << "a[" << i << "]=" << x << ";";
	//				l += 1e7;
	//			}
	//		}
	while(T--) {
		solve();
	}
	return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 0ms
memory: 3792kb

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: 27ms
memory: 4124kb

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
9
0
1
0
2
0
0
0
4
0
1
0
0
1
0
5
0
0
0
6
1
7
1
1
3
2
0
15
0
1
0
0
0
1
1
0
0
6
60
0
0
24
0
0
1
0
18
1
24
8
3
2
0
1
0
4
0
0
0
0
0
0
0
0
0
1
0
3
1
1
15
0
0
0
1
0
0
0
2
0
1
0
0
1
1
0
0
0
7
0
0
0
10
0
9
0
0
0
2
7
0
2
0
0
2
0
1
0
0
8
0
3
2
0
0
1
0
0
14
0
1
1
0
0
1
1
1
0
0
1
2
1
1
1
0
28
2
1
0
0
0
1
7
8...

result:

wrong answer 3rd lines differ - expected: '112', found: '9'