首页 > 其他分享 >[ARC162D] Smallest Vertices 题解

[ARC162D] Smallest Vertices 题解

时间:2024-02-05 15:13:14浏览次数:32  
标签:ch ARC162D ifac int 题解 1ll Smallest res fac

题目链接

点击打开链接

题目解法

这种树的形态计数题首先可以想到 \(prufer\) 序列计数,如果没有任何限制,那么方案数为 \(\prod \frac{(n-2)!}{deg_i}\),其中 \(deg_1=d_1-1,deg_i=d_i(2\le i\le n)\)

对于每个点分开求贡献
考虑这个式子只和点的个数和子树内的 \(\sum deg\) 有关
所以说,如果我们知道了 点数为 \(x\),且 \(\sum deg=y\) 的方案数,是容易求出最后的方案数的(系数可以直接看代码)
点数为 \(x\),且 \(\sum deg=y\) 的方案数 是容易背包求解的,只要从后往前加点,就可以做到 \(O(n^3)\)

#include <bits/stdc++.h>
#define F(i,x,y) for(int i=(x);i<=(y);i++)
#define DF(i,x,y) for(int i=(x);i>=(y);i--)
#define ms(x,y) memset(x,y,sizeof(x))
#define SZ(x) (int)x.size()-1
#define all(x) x.begin(),x.end()
#define pb push_back
using namespace std;
typedef long long LL;
typedef unsigned long long ull;
typedef pair<int,int> pii;
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);}
inline int read(){
    int FF=0,RR=1;
    char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;
    for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;
    return FF*RR;
}
const int N=510,P=998244353;
int n,fac[N],ifac[N],d[N],f[N][N];
int qmi(int a,int b){
    int res=1;
    for(;b;b>>=1){ if(b&1) res=1ll*res*a%P;a=1ll*a*a%P;}
    return res;
}
void comb(int n){
    fac[0]=1;F(i,1,n) fac[i]=1ll*fac[i-1]*i%P;
    ifac[n]=qmi(fac[n],P-2);DF(i,n-1,0) ifac[i]=1ll*ifac[i+1]*(i+1)%P;
}
inline void inc(int &x,int y){ x+=y;if(x>=P) x-=P;}
int main(){
    n=read();
    comb(n);
    F(i,1,n) d[i]=read();
    int tot=1ll*fac[n-2]*ifac[d[1]-1]%P;
    F(i,2,n) tot=1ll*tot*ifac[d[i]]%P;
    int ans=tot;
    f[0][0]=1;
    DF(i,n,2){
        if(!d[i]) inc(ans,tot);
        else{
            int res=1ll*ifac[d[1]-1]*ifac[d[i]-1]%P;
            F(j,2,n) if(i!=j) res=1ll*res*ifac[d[j]]%P;
            F(j,d[i],n-i) inc(ans,1ll*res*f[j][j-d[i]]%P*fac[max(0,n-j-2)]%P*fac[j-1]%P);
        }
        DF(p,n,1) DF(q,n,d[i]) inc(f[p][q],f[p-1][q-d[i]]);
    }
    printf("%d\n",ans);
    return 0;
}

标签:ch,ARC162D,ifac,int,题解,1ll,Smallest,res,fac
From: https://www.cnblogs.com/Farmer-djx/p/18008201

相关文章

  • P3604 美好的每一天 题解
    题目链接:美好的每一天经典题,这种字符串重排以后回文,优先考虑异或操作。考虑对一个字符串状态压缩,每个字符表示为\(1<<(c-97)\),然后将它们异或起来就可以得到一个字符串的状态压缩情况。考虑每一位异或情况,如果为偶数个单个字符则为\(0\),奇数则为\(1\),注意可以重排,那么当且仅......
  • 2024牛客寒假算法基础集训营1 J 又鸟之亦心 题解
    Question2024牛客寒假算法基础集训营1J又鸟之亦心Solution挺好的一个题,给了我很多启发显然,先二分最大值\(D\),关键在于\(check\)怎么写考虑到两个人是相对的,第\(i\)次之后肯定有一个人在\(a_i\),具体是谁不重要,也不需要关注是怎么走过来的,我们需要去维护另外一个人可......
  • 2024牛客寒假算法基础集训营1 K 牛镇公务员考试 题解
    Question2024牛客寒假算法基础集训营1K牛镇公务员考试给出一张试卷有\(n\)道单选题,每道题用一个整数\(a_i\)和一个长度为\(5\)的字符串\(s_i\)表示,其中第\(i\)道题的题面为:第\(a_i\)道题的答案是()A.\(s_1\)B.\(s_2\)C.\(s_3\)D.\(s_4\)E.\(s_5\)问:正......
  • [CF383E] Vowels 题解
    [CF383E]Vowels题解思路要求的这个东西一看就没什么性质,考虑枚举所有元音子集。如果我们能够求出\(f_s\)表示\(s\)集合作为元音时有多少个单词至少包含一个元音。难求,正难则反,考虑\(f_s\)表示\(s\)集合作为元音时有多少个单词全都由非元音字母组成,由于对称性,我们只......
  • Luogu「Daily OI Round 3」Simple 题解
    #include<iostream>#include<cstdio>#include<queue>#include<algorithm>#include<cstring>#include<string>#include<string.h>#include<vector>#defineintlonglong#definerep(a,b,c)for(autoa=b;a......
  • [ARC114D] Moving Pieces on Line 题解
    题目链接点击打开链接题目解法有点牛的题,前面的转化感觉很妙首先一个显然的性质是:一个棋子不可能走回头路,不然前面的路就白走了下面是最妙的一步:我们令\(st_i\)为\(i-1\toi\)和\(i\toi+1\)的颜色是否相同,那么问题可以转化成:选择\(\{p_i\}\),一开始所有点颜色为\(0\)......
  • ABC339 F Product Equality 题解
    QuestionABC339FProductEquality给出一个序列\(A_1,A_2,\cdots,A_N\)计算数对\((i,j,k)\)满足\(A_i\timesA_j=A_k\)的个数\(A_i\le10^{1000}\)Solution思考\(A_i\)比较小的情况如果\(A_i\le1e9\)的,暴力枚举\(i,j\)然后用\(map\)查找\(A_i\timesA_j......
  • gitlab 502问题解决
    问题现象: Whoops,GitLabistakingtoomuchtimetorespond.Tryrefreshingthepage,orgoingbackandattemptingtheactionagain.PleasecontactyourGitLabadministratorifthisproblempersists. 问题定位分析:一、查看系统资源使用情况磁盘满了g......
  • Linux服务器升级GLIBC失败导致shell不可用的问题解决经历
    转自https://blog.csdn.net/u010549608/article/details/126281354?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170696599716800182728626%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170696599716800182728626&biz_i......
  • ABC339_g Smaller Sum 题解
    题目链接:Atcoder或者洛谷比价朴素的题,首先有暴力的想法就是树套树或者分块。这两种就不再赘述,这里来正式提提主xi树(应该不能打出来这玩意)的本质而不再停留在板题找第\(k\)大上。对于可差性问题和传统问题不同,我们对于可差性问题往往都有更好的优化方案。例如对于树类问......