CF1172B Nauuo and Circle

Posted lcxer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF1172B Nauuo and Circle相关的知识,希望对你有一定的参考价值。

codeforces

很有意思的题。

考虑dp,设\(f_i\)表示\(i\)这棵字树的答案。

显然有\(f_i=deg_x!\prod_j\in son[i]f_j\)

由于根节点是钦定的,所以答案还要乘上一个\(n\)

代码:

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
#define rg register
void read(int &x)
    char ch;bool ok;
    for(ok=0,ch=getchar();!isdigit(ch);ch=getchar())if(ch=='-')ok=1;
    for(x=0;isdigit(ch);x=x*10+ch-'0',ch=getchar());if(ok)x=-x;

const int maxn=2e5+10,mod=998244353;
int n,f[maxn],in[maxn],fac[maxn];
int cnt,pre[maxn*2],nxt[maxn*2],h[maxn];
int mul(int x,int y)return 1ll*x*y-1ll*x*y/mod*mod;
void add(int x,int y)
    pre[++cnt]=y,nxt[cnt]=h[x],h[x]=cnt;
    pre[++cnt]=x,nxt[cnt]=h[y],h[y]=cnt;

void dfs(int x,int fa)
    f[x]=fac[in[x]];
    for(rg int i=h[x];i;i=nxt[i])
    if(pre[i]!=fa)dfs(pre[i],x),f[x]=mul(f[x],f[pre[i]]);

int main()
    read(n);fac[0]=1;
    for(rg int i=1;i<=n;i++)fac[i]=mul(fac[i-1],i);
    for(rg int i=1,x,y;i<n;i++)
    read(x),read(y),add(x,y),in[x]++,in[y]++;
    
    dfs(1,0);printf("%d\n",mul(f[1],n));

以上是关于CF1172B Nauuo and Circle的主要内容,如果未能解决你的问题,请参考以下文章

CF1172A Nauuo and Cards 贪心

cf1173 D. Nauuo and Circle

CF1173A Nauuo and Votes题解

Nauuo and ODT CF1172E

CF 1173C Nauuo and Cards

Codeforces 1173A Nauuo and Votes