提出 #18407878
ソースコード 拡げる
/*
after dusk passed,
there is a starry sky.
*/
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define m_k make_pair
#define mod 924844033
#define int long long
using namespace std;
const int N=2*1e5+100;
int n,sz[N],f[N*4],g[N*4],rev[N*4],len,fac[N],inv[N];
int tot,first[N],nxt[N*2],point[N*2];
inline void add(int &a,int b){a=((a+b>mod)?a+b-mod:a+b);}
inline void del(int &a,int b){a=((a-b<0)?a-b+mod:a-b);}
inline void mul(int &a,int b){a=(a*b)%mod;}
inline int C(int n,int m){return fac[n]*inv[m]%mod*inv[n-m]%mod;}
inline int m_pow(int a,int b)
{
int ans=1;
while (b)
{
if (b&1) mul(ans,a);
b>>=1;
mul(a,a);
}
return ans;
}
inline int read()
{
int f=1,x=0;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
return x*f;
}
inline void add_edge(int x,int y)
{
nxt[++tot]=first[x];
first[x]=tot;
point[tot]=y;
}
inline void change(int len)
{
for (int i=0;i<len;i++)
{
rev[i]=rev[i>>1]>>1;
if (i&1) rev[i]|=len>>1;
}
}
inline void ntt(int y[],int len,int v)
{
for (int i=0;i<len;i++) if (i<rev[i]) swap(y[i],y[rev[i]]);
for (int i=2;i<=len;i<<=1)
{
int step=m_pow(5,(mod-1)/i);
if (v==-1) step=m_pow(step,mod-2);
for (int j=0;j<len;j+=i)
{
int x=1;
for (int k=j;k<j+i/2;k++)
{
int a=y[k],b=x*y[k+i/2]%mod;
y[k]=(a+b)%mod;
y[k+i/2]=(a-b+mod)%mod;
mul(x,step);
}
}
}
if (v==-1)
{
int invlen=m_pow(len,mod-2);
for (int i=0;i<len;i++) mul(y[i],invlen);
}
}
void dfs(int x,int fa)
{
sz[x]=1;
for (int i=first[x];i!=-1;i=nxt[i])
{
int u=point[i];if (u==fa) continue;
dfs(u,x);
sz[x]+=sz[u];
}
}
inline void print(int y[],int len)
{
for (int i=0;i<len;i++) printf("%lld ",y[i]);
printf("\n");
}
signed main()
{
tot=-1;
memset(first,-1,sizeof(first));
n=read();
for (int i=1;i<n;i++)
{
int u=read(),v=read();
add_edge(u,v);add_edge(v,u);
}
dfs(1,1);
for (int i=2;i<=n;i++) f[sz[i]]++,f[n-sz[i]]++;
fac[0]=1;
for (int i=1;i<=n;i++) fac[i]=fac[i-1]*i%mod;
inv[n]=m_pow(fac[n],mod-2);
for (int i=n-1;i>=0;i--) inv[i]=(inv[i+1]*(i+1))%mod;
for (int i=0;i<=n;i++) g[i]=inv[i],mul(f[i],fac[i]);
reverse(g,g+1+n);
len=1;while (len<=n+n) len<<=1;change(len);
ntt(f,len,1);ntt(g,len,1);
for (int i=0;i<len;i++) mul(f[i],g[i]);
ntt(f,len,-1);
for (int i=1;i<=n;i++)
{
int ans=n*C(n,i)%mod;
del(ans,f[n+i]*inv[i]%mod);
printf("%lld\n",ans);
}
}
提出情報
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
1900 / 1900 |
| 結果 |
|
|
| セット名 |
テストケース |
| 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 |
| ケース名 |
結果 |
実行時間 |
メモリ |
| doublestar0 |
AC |
153 ms |
28428 KiB |
| doublestar1 |
AC |
149 ms |
28424 KiB |
| doublestar2 |
AC |
150 ms |
28440 KiB |
| doublestar3 |
AC |
150 ms |
28408 KiB |
| doublestar4 |
AC |
150 ms |
28248 KiB |
| example0 |
AC |
5 ms |
5268 KiB |
| example1 |
AC |
4 ms |
5248 KiB |
| example2 |
AC |
4 ms |
5172 KiB |
| line0 |
AC |
160 ms |
41736 KiB |
| line1 |
AC |
161 ms |
41544 KiB |
| line2 |
AC |
162 ms |
41744 KiB |
| line3 |
AC |
164 ms |
41520 KiB |
| line4 |
AC |
160 ms |
41644 KiB |
| maxrand0 |
AC |
164 ms |
28436 KiB |
| maxrand1 |
AC |
165 ms |
28312 KiB |
| maxrand10 |
AC |
161 ms |
28352 KiB |
| maxrand11 |
AC |
161 ms |
28332 KiB |
| maxrand12 |
AC |
163 ms |
28380 KiB |
| maxrand13 |
AC |
167 ms |
28252 KiB |
| maxrand14 |
AC |
163 ms |
28312 KiB |
| maxrand15 |
AC |
163 ms |
28476 KiB |
| maxrand16 |
AC |
163 ms |
28448 KiB |
| maxrand17 |
AC |
162 ms |
28328 KiB |
| maxrand18 |
AC |
162 ms |
28328 KiB |
| maxrand19 |
AC |
164 ms |
28472 KiB |
| maxrand2 |
AC |
165 ms |
28444 KiB |
| maxrand3 |
AC |
164 ms |
28440 KiB |
| maxrand4 |
AC |
166 ms |
28364 KiB |
| maxrand5 |
AC |
168 ms |
28360 KiB |
| maxrand6 |
AC |
166 ms |
28384 KiB |
| maxrand7 |
AC |
165 ms |
28332 KiB |
| maxrand8 |
AC |
164 ms |
28548 KiB |
| maxrand9 |
AC |
164 ms |
28472 KiB |
| rand0 |
AC |
12 ms |
5608 KiB |
| rand1 |
AC |
5 ms |
5188 KiB |
| rand2 |
AC |
7 ms |
5452 KiB |
| rand3 |
AC |
8 ms |
5584 KiB |
| rand4 |
AC |
11 ms |
5356 KiB |
| rand5 |
AC |
8 ms |
5520 KiB |
| rand6 |
AC |
7 ms |
5396 KiB |
| rand7 |
AC |
8 ms |
5664 KiB |
| rand8 |
AC |
4 ms |
5244 KiB |
| rand9 |
AC |
10 ms |
5424 KiB |
| star0 |
AC |
151 ms |
28316 KiB |
| star1 |
AC |
147 ms |
28440 KiB |
| star2 |
AC |
149 ms |
28364 KiB |
| star3 |
AC |
147 ms |
28468 KiB |
| star4 |
AC |
150 ms |
28524 KiB |