Submission #1842141
Source Code Expand
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cassert>
#include <cctype>
using namespace std;
typedef long long lint;
#define cout cerr
#define ni (next_num<int>())
template<class T>inline T next_num(){
T i=0;char c;
while(!isdigit(c=getchar())&&c!='-');
bool flag=c=='-';
flag?(c=getchar()):0;
while(i=i*10-'0'+c,isdigit(c=getchar()));
return flag?-i:i;
}
const int N=200010,O=924844033;
inline int fpow(int x,int n){
int a=1;
for(;n;n>>=1,x=(lint)x*x%O){
if(n&1){
a=(lint)a*x%O;
}
}
return a;
}
inline int inv(int x){
return fpow(x,O-2);
}
namespace poly{
const int SH=19,N=1<<SH;
int sh,n,invn;
int rev[N],o[SH][N<<1],io[SH][N<<1];
inline void init(int _n){//g=5
for(sh=0;(1<<sh)<_n;sh++);
n=1<<sh,invn=inv(n);
rev[0]=0;
for(int i=0;i<n;i++){
rev[i]=(rev[i>>1]>>1)|((i&1)<<(sh-1));
}
for(int i=0;i<sh;i++){
int half=1<<i,full=half<<1;
lint w=1,iw=1,wn=fpow(5,(O-1)/full),iwn=inv(wn);
for(int j=0;j<half;j++,(w*=wn)%=O,(iw*=iwn)%=O){
o[i][j]=w,io[i][j]=iw;
}
}
}
inline void ntt(int a[],int d=1){
for(int i=0;i<n;i++){
if(rev[i]>i){
swap(a[i],a[rev[i]]);
}
}
for(int i=0;i<sh;i++){
int half=1<<i,full=half<<1;
for(int j=0;j<half;j++){
int w=(d==1?o:io)[i][j];
for(int k=j;k<n;k+=full){
int p=a[k],q=(lint)a[k+half]*w%O;
a[k]=(p+q)%O;
a[k+half]=(p+O-q)%O;
}
}
}
if(d==-1){
for(int i=0;i<n;i++){
a[i]=(lint)a[i]*invn%O;
}
}
}
}
int n,cnt[N];
namespace T{
const int E=N<<1;
int to[E],bro[E],head[N],e=0;
inline void init(){
memset(head,-1,sizeof(head));
}
inline void ae(int u,int v){
to[e]=v,bro[e]=head[u],head[u]=e++;
}
inline void add(int u,int v){
ae(u,v),ae(v,u);
}
int dfs(int x,int fa){
int size=1;
for(int i=head[x],v;~i;i=bro[i]){
if((v=to[i])!=fa){
size+=dfs(v,x);
}
}
if(fa){
cnt[size]++;
cnt[n-size]++;
}
return size;
}
}
int fac[N],invfac[N];
inline void gmath(int n){
fac[0]=1;
for(int i=1;i<=n;i++){
fac[i]=(lint)fac[i-1]*i%O;
}
invfac[n]=inv(fac[n]);
for(int i=n;i>=1;i--){
invfac[i-1]=(lint)invfac[i]*i%O;
}
}
int a[poly::N],b[poly::N];
int main(){
n=ni;
gmath(n),T::init();
for(int i=1;i<n;T::add(ni,ni),i++);
T::dfs(1,0);
poly::init(n<<1);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(int i=0;i<n;i++){
a[i]=(lint)fac[n-i]*cnt[n-i]%O;
b[i]=invfac[i];
}
poly::ntt(a),poly::ntt(b);
for(int i=0;i<poly::n;i++){
a[i]=(lint)a[i]*b[i]%O;
}
poly::ntt(a,-1);
for(int k=1;k<=n;k++){
lint ans=(lint)fac[n]*invfac[k]%O*invfac[n-k]%O*n%O;
ans-=(lint)a[n-k]*invfac[k]%O;
printf("%lld\n",(ans%O+O)%O);
}
return 0;
}
Submission Info
Submission Time |
|
Task |
F - Many Easy Problems |
User |
sshockwave |
Language |
C++14 (GCC 5.4.1) |
Score |
1900 |
Code Size |
2789 Byte |
Status |
AC |
Exec Time |
251 ms |
Memory |
100352 KB |
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 |
241 ms |
92416 KB |
doublestar1 |
AC |
241 ms |
92416 KB |
doublestar2 |
AC |
241 ms |
92416 KB |
doublestar3 |
AC |
239 ms |
92416 KB |
doublestar4 |
AC |
239 ms |
92416 KB |
example0 |
AC |
7 ms |
24832 KB |
example1 |
AC |
7 ms |
24832 KB |
example2 |
AC |
7 ms |
28928 KB |
line0 |
AC |
249 ms |
100352 KB |
line1 |
AC |
251 ms |
100352 KB |
line2 |
AC |
250 ms |
100352 KB |
line3 |
AC |
250 ms |
100352 KB |
line4 |
AC |
248 ms |
100352 KB |
maxrand0 |
AC |
248 ms |
92416 KB |
maxrand1 |
AC |
248 ms |
92416 KB |
maxrand10 |
AC |
247 ms |
92416 KB |
maxrand11 |
AC |
247 ms |
92416 KB |
maxrand12 |
AC |
247 ms |
92416 KB |
maxrand13 |
AC |
246 ms |
92416 KB |
maxrand14 |
AC |
246 ms |
92416 KB |
maxrand15 |
AC |
249 ms |
92416 KB |
maxrand16 |
AC |
246 ms |
92416 KB |
maxrand17 |
AC |
247 ms |
92416 KB |
maxrand18 |
AC |
248 ms |
92416 KB |
maxrand19 |
AC |
247 ms |
92416 KB |
maxrand2 |
AC |
246 ms |
92416 KB |
maxrand3 |
AC |
248 ms |
92416 KB |
maxrand4 |
AC |
248 ms |
92416 KB |
maxrand5 |
AC |
248 ms |
92416 KB |
maxrand6 |
AC |
249 ms |
92544 KB |
maxrand7 |
AC |
247 ms |
92416 KB |
maxrand8 |
AC |
245 ms |
92416 KB |
maxrand9 |
AC |
246 ms |
92416 KB |
rand0 |
AC |
16 ms |
65792 KB |
rand1 |
AC |
11 ms |
45312 KB |
rand2 |
AC |
15 ms |
61696 KB |
rand3 |
AC |
16 ms |
65792 KB |
rand4 |
AC |
13 ms |
57600 KB |
rand5 |
AC |
16 ms |
65792 KB |
rand6 |
AC |
15 ms |
61696 KB |
rand7 |
AC |
16 ms |
65792 KB |
rand8 |
AC |
12 ms |
53504 KB |
rand9 |
AC |
15 ms |
61696 KB |
star0 |
AC |
237 ms |
92416 KB |
star1 |
AC |
236 ms |
92416 KB |
star2 |
AC |
239 ms |
92416 KB |
star3 |
AC |
236 ms |
92416 KB |
star4 |
AC |
236 ms |
92416 KB |