Submission #41479722


Source Code Expand

#include <bits/stdc++.h>
#define SZ(x) (int) x.size() - 1
#define all(x) x.begin(), x.end()
#define ms(x, y) memset(x, y, sizeof x)
#define F(i, x, y) for (int i = (x); i <= (y); i++)
#define DF(i, x, y) for (int i = (x); i >= (y); i--)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
template <typename T> void chkmax(T& x, T y) { x = max(x, y); }
template <typename T> void chkmin(T& x, T y) { x = min(x, y); }
template <typename T> void read(T &x) {
	x = 0; int f = 1; char c = getchar();
	for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
	for (; isdigit(c); c = getchar()) x = x * 10 + c - '0';
	x *= f;
}
const int N = 2e5 + 10, MOD = 924844033;
int n, sz[N], fac[N], ifac[N], inv[N];
vector <int> v[N], a;
void dfs(int x, int fa) {
	sz[x] = 1;
	for (int i: v[x])
		if (i != fa) {
			dfs(i, x);
			a[sz[i]]++;
			sz[x] += sz[i];
		}
	a[n - sz[x]]++;
}
inline int Quickpow(int x, int y = MOD - 2) {
	int ans = 1;
	for (; y; x = (ll) x * x % MOD, y >>= 1)
		if (y & 1) ans = (ll) ans * x % MOD;
	return ans;
}
namespace NTT {
	const int N = (1 << 21) + 10;
	int rev[N], lim;
	void ntt(int *f, int flag) {
		F(i, 0, lim - 1)
			if (i < rev[i]) swap(f[i], f[rev[i]]);
		for (int len = 2, t = 1; len <= lim; len <<= 1, t <<= 1) {
			int r = Quickpow(5, ((MOD - 1) / len * flag + MOD - 1) % (MOD - 1));
			for (int i = 0; i < lim; i += len) {
				int tt = 1;
				for (int j = i; j < i + t; j++) {
					int A = f[j], B = (ll) f[j + t] * tt % MOD;
					f[j] = A + B; if (f[j] > MOD) f[j] -= MOD;
					f[j + t] = A - B; if (f[j + t] < 0) f[j + t] += MOD;
					tt = (ll) tt * r % MOD;
				}
			}
		}
		if (flag == -1) {
			int t = Quickpow(lim);
			F(i, 0, lim - 1) f[i] = (ll) f[i] * t % MOD;
		}
	}
	vector <int> solve(vector <int> a, vector <int> b) {
		int sum = SZ(a) + SZ(b);
		int s = -1;
		for (lim = 1; lim <= sum; lim <<= 1, s++);
		a.resize(lim), b.resize(lim);
		F(i, 1, lim - 1) rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << s);
		ntt(a.data(), 1); ntt(b.data(), 1);
		F(i, 0, lim - 1) a[i] = (ll) a[i] * b[i] % MOD;
		ntt(a.data(), -1);
		a.resize(sum + 1);
		return a;
	}
}
void init(int n) {
	fac[0] = ifac[0] = inv[1] = 1;
	F(i, 2, n) inv[i] = (ll) (MOD - MOD / i) * inv[MOD % i] % MOD;
	F(i, 1, n) fac[i] = (ll) fac[i - 1] * i % MOD, ifac[i] = (ll) ifac[i - 1] * inv[i] % MOD;
}
int C(int n, int m) {
	return m < 0 || n < m ? 0 : (ll) fac[n] * ifac[m] % MOD * ifac[n - m] % MOD;
}
signed main() {
	read(n);
	init(n);
	F(i, 2, n) {
		int x, y; read(x), read(y);
		v[x].push_back(y);
		v[y].push_back(x);
	} a.resize(n);
	dfs(1, 0);
	F(i, 0, n - 1) a[i] = (ll) a[i] * fac[i] % MOD;
	vector <int> b(n);
	F(i, 0, n - 1) b[n - 1 - i] = ifac[i];// * ((i & 1) ? MOD - 1 : 1) % MOD;
	// F(i, 0, n - 1) cout << a[i] << " "; cout << endl;
	// F(i, 0, n - 1) cout << b[i] << " "; cout << endl;
	vector <int> c = NTT::solve(a, b);
	// F(i, 0, 2 * n - 2) cout << c[i] << " "; cout << endl;
	F(i, n, 2 * n - 1) {
		int ans = (ll) C(n, i - (n - 1)) * n % MOD - (ll) c[i] * ifac[i - (n - 1)] % MOD + MOD;
		cout << ans % MOD << '\n';
	}
	return 0;
}

Submission Info

Submission Time
Task F - Many Easy Problems
User ast123
Language C++ (GCC 9.2.1)
Score 1900
Code Size 3178 Byte
Status AC
Exec Time 183 ms
Memory 38116 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1900 / 1900
Status
AC × 3
AC × 48
Set Name Test Cases
Sample example0, example1, example2
All doublestar0, doublestar1, doublestar2, doublestar3, doublestar4, example0, example1, example2, line0, line1, line2, line3, line4, maxrand0, maxrand1, maxrand10, maxrand11, maxrand12, maxrand13, maxrand14, maxrand15, maxrand16, maxrand17, maxrand18, maxrand19, maxrand2, maxrand3, maxrand4, maxrand5, maxrand6, maxrand7, maxrand8, maxrand9, rand0, rand1, rand2, rand3, rand4, rand5, rand6, rand7, rand8, rand9, star0, star1, star2, star3, star4
Case Name Status Exec Time Memory
doublestar0 AC 146 ms 25200 KiB
doublestar1 AC 145 ms 25064 KiB
doublestar2 AC 145 ms 25304 KiB
doublestar3 AC 143 ms 25116 KiB
doublestar4 AC 145 ms 25152 KiB
example0 AC 10 ms 8180 KiB
example1 AC 7 ms 8284 KiB
example2 AC 12 ms 8308 KiB
line0 AC 168 ms 38036 KiB
line1 AC 165 ms 37860 KiB
line2 AC 165 ms 38088 KiB
line3 AC 163 ms 38116 KiB
line4 AC 165 ms 37984 KiB
maxrand0 AC 177 ms 25060 KiB
maxrand1 AC 172 ms 25060 KiB
maxrand10 AC 172 ms 24980 KiB
maxrand11 AC 174 ms 24980 KiB
maxrand12 AC 171 ms 25004 KiB
maxrand13 AC 174 ms 24948 KiB
maxrand14 AC 175 ms 24924 KiB
maxrand15 AC 179 ms 25056 KiB
maxrand16 AC 174 ms 25060 KiB
maxrand17 AC 172 ms 24952 KiB
maxrand18 AC 171 ms 24976 KiB
maxrand19 AC 183 ms 25056 KiB
maxrand2 AC 179 ms 25088 KiB
maxrand3 AC 175 ms 24896 KiB
maxrand4 AC 173 ms 25148 KiB
maxrand5 AC 170 ms 24916 KiB
maxrand6 AC 172 ms 25080 KiB
maxrand7 AC 172 ms 24920 KiB
maxrand8 AC 171 ms 25000 KiB
maxrand9 AC 173 ms 25004 KiB
rand0 AC 12 ms 8568 KiB
rand1 AC 9 ms 8316 KiB
rand2 AC 9 ms 8432 KiB
rand3 AC 12 ms 8560 KiB
rand4 AC 8 ms 8328 KiB
rand5 AC 12 ms 8388 KiB
rand6 AC 8 ms 8444 KiB
rand7 AC 10 ms 8392 KiB
rand8 AC 10 ms 8236 KiB
rand9 AC 10 ms 8420 KiB
star0 AC 141 ms 25444 KiB
star1 AC 142 ms 25432 KiB
star2 AC 142 ms 25700 KiB
star3 AC 147 ms 25432 KiB
star4 AC 142 ms 25676 KiB