提交时间:2024-01-15 14:37:46
运行 ID: 24924
#include<bits/stdc++.h> using namespace std; //#define int long long int n; vector<int>g[5030]; const int M=998244353; int f[5010][5010][3]; int t[5010]; int s[5010][3]; int siz[5010]; inline void add(int &x,int y){ x+=y; if(x>=M)x-=M; } inline void dfs(int u,int fa){ siz[u]=1; f[u][1][0]=1; for(int v:g[u]) if(v!=fa){ dfs(v,u); memset(s,0,sizeof(s)); for(int i=1;i<=siz[u];i++) for(int j=1;j<=siz[v];j++){ add(s[i+j][0],1ll*f[u][i][0]*f[v][j][0]%M); add(s[i+j][1],1ll*f[u][i][1]*f[v][j][0]%M); add(s[i+j][2],1ll*f[u][i][2]*f[v][j][0]%M); add(s[i+j][0],1ll*f[u][i][0]*f[v][j][1]*2%M); add(s[i+j][1],1ll*f[u][i][1]*f[v][j][1]*2%M); add(s[i+j][2],1ll*f[u][i][2]*f[v][j][1]*2%M); add(s[i+j][0],1ll*f[u][i][0]*f[v][j][2]*2%M); add(s[i+j][1],1ll*f[u][i][1]*f[v][j][2]*2%M); add(s[i+j][2],1ll*f[u][i][2]*f[v][j][2]*2%M); add(s[i+j-1][1],1ll*f[u][i][0]*f[v][j][0]%M); add(s[i+j-1][1],1ll*f[u][i][0]*f[v][j][1]%M); add(s[i+j-1][2],1ll*f[u][i][1]*f[v][j][0]%M); add(s[i+j-1][2],1ll*f[u][i][1]*f[v][j][1]%M); } memcpy(f[u],s,sizeof(s)); siz[u]+=siz[v]; } } signed main(){ //freopen("mission.in","r",stdin); //freopen("mission.out","w",stdout); ios::sync_with_stdio(0); cin>>n; for(int i=1;i<n;i++){ int u,v; cin>>u>>v; g[u].push_back(v); g[v].push_back(u); } dfs(1,0); int res=0; int fac=1; for(int i=1;i<=n;i++){ fac=1ll*fac*i%M; t[i]=(f[1][i][0]+2ll*f[1][i][1]+2*f[1][i][2])%M*fac%M; // cout<<t[i]<<" "; int s=n-i; if(s&1)add(res,M-t[i]); else add(res,t[i]); } cout<<res<<endl; cout.flush(); return 0; }