Submission #69714453


Source Code Expand

#include<bits/stdc++.h>
#define L(i, j, k) for(int i = (j); i <= (k); i++)
#define R(i, j, k) for(int i = (j); i >= (k); i--)
#define ll long long
#define sz(a) ((int) a.size())
#define vi vector<int>
#define pb emplace_back
#define me(a, x) memset(a, x, sizeof(a))
using namespace std;
const int N = 10007, mod = 998244353, inv2 = (mod + 1) / 2;
int qpow(int x, int y = mod - 2) {
	int res = 1;
	for(; y; x = (ll) x * x % mod, y >>= 1) if(y & 1) res = (ll) res * x % mod;
	return res;
}
int fac[N], ifac[N], inv[N];
void init(int x) {
	fac[0] = ifac[0] = inv[1] = 1;
	L(i, 2, x) inv[i] = (ll) (mod - mod / i) * inv[mod % i] % mod;
	L(i, 1, x) fac[i] = (ll) fac[i - 1] * i % mod, ifac[i] = (ll) ifac[i - 1] * inv[i] % mod;
} 
int C(int x, int y) {
	return x < y || y < 0 ? 0 : (ll) fac[x] * ifac[y] % mod * ifac[x - y] % mod;
}
inline int sgn(int x) {
	return (x & 1) ? mod - 1 : 1;
}

int dp[N / 2][N];
int n;
vi e[N];
int siz[N];
int sav[N];
void dfs(int x, int fa) {
	dp[x][1] = 1;
	siz[x] = 1;
	for(auto&v : e[x]) if(v != fa) {
		dfs(v, x);
		me(sav, 0);
		int sum = 0;
		L(j, 0, siz[v] * 2)
			(sum += (ll)dp[v][j] * inv[j + 1] % mod) %= mod;
		L(i, 0, siz[x] * 2) 
			(sav[i] += (ll)dp[x][i] * sum % mod) %= mod;
		L(i, 0, siz[x] * 2) {
			L(j, 0, siz[v] * 2) {
				(sav[i + j + 1] += (ll)dp[x][i] * dp[v][j] % mod) %= mod;
			}
		}
		//L(i, 0, siz[x] * 2) {
		//	L(j, 0, siz[v] * 2) {
		//		(sav[i + j + 1] += mod - (ll)dp[x][i] * dp[v][j] % mod * inv[j + 1] % mod) %= mod;
		//	}
		//}
		//L(i, 0, siz[x] * 2) {
		//	L(j, 0, siz[v] * 2) {
		//		(sav[i + j + 2] += (ll)dp[x][i] * dp[v][j] % mod * inv[j + 2] % mod) %= mod;
		//	}
		//}
		swap(sav, dp[x]);
		siz[x] += siz[v];
	}
}
int ans;
int main() {
	ios :: sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	cin >> n;
	init(n * 2);
	L(i, 1, n - 1) {
		int u, v;
		cin >> u >> v;
		e[u].pb(v);
		e[v].pb(u);
	}
	dfs(1, 0);
	L(i, 1, n * 2) {
		(ans += (ll)dp[1][i] * inv[i + 1] % mod) %= mod;
		//cout << i << ' ' << dp[1][i] << ' ' << (ll)dp[1][i] * fac[n * 2] % mod << '\n';
	}
	ans = (ll)ans * qpow(qpow(n), n) % mod;
	cout << ans << '\n';
	return 0;
}

Submission Info

Submission Time
Task C - Product of Max of Sum of Subtree
User zhoukangyang
Language C++ 17 (gcc 12.2)
Score 1400
Code Size 2197 Byte
Status AC
Exec Time 343 ms
Memory 199720 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1400 / 1400
Status
AC × 5
AC × 33
Set Name Test Cases
Sample 00-sample-001.txt, 00-sample-002.txt, 00-sample-003.txt, 00-sample-004.txt, 00-sample-005.txt
All 00-sample-001.txt, 00-sample-002.txt, 00-sample-003.txt, 00-sample-004.txt, 00-sample-005.txt, 01-001.txt, 01-002.txt, 01-003.txt, 01-004.txt, 01-005.txt, 01-006.txt, 01-007.txt, 01-008.txt, 01-009.txt, 01-010.txt, 01-011.txt, 01-012.txt, 01-013.txt, 01-014.txt, 01-015.txt, 01-016.txt, 01-017.txt, 01-018.txt, 01-019.txt, 01-020.txt, 01-021.txt, 01-022.txt, 01-023.txt, 01-024.txt, 01-025.txt, 01-026.txt, 01-027.txt, 01-028.txt
Case Name Status Exec Time Memory
00-sample-001.txt AC 1 ms 3720 KiB
00-sample-002.txt AC 1 ms 3780 KiB
00-sample-003.txt AC 1 ms 3688 KiB
00-sample-004.txt AC 1 ms 3840 KiB
00-sample-005.txt AC 1 ms 3828 KiB
01-001.txt AC 3 ms 5364 KiB
01-002.txt AC 2 ms 4736 KiB
01-003.txt AC 3 ms 5412 KiB
01-004.txt AC 107 ms 71412 KiB
01-005.txt AC 78 ms 57048 KiB
01-006.txt AC 71 ms 52808 KiB
01-007.txt AC 343 ms 199720 KiB
01-008.txt AC 281 ms 24080 KiB
01-009.txt AC 286 ms 111704 KiB
01-010.txt AC 216 ms 111700 KiB
01-011.txt AC 272 ms 112040 KiB
01-012.txt AC 219 ms 112372 KiB
01-013.txt AC 277 ms 134348 KiB
01-014.txt AC 259 ms 90280 KiB
01-015.txt AC 216 ms 112328 KiB
01-016.txt AC 225 ms 123808 KiB
01-017.txt AC 277 ms 143716 KiB
01-018.txt AC 259 ms 88548 KiB
01-019.txt AC 223 ms 124092 KiB
01-020.txt AC 226 ms 126992 KiB
01-021.txt AC 303 ms 149928 KiB
01-022.txt AC 259 ms 87004 KiB
01-023.txt AC 225 ms 127152 KiB
01-024.txt AC 278 ms 155780 KiB
01-025.txt AC 220 ms 67888 KiB
01-026.txt AC 341 ms 155984 KiB
01-027.txt AC 246 ms 67956 KiB
01-028.txt AC 257 ms 111912 KiB