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 |
|
|
| 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 |