首页 > 其他分享 >[ARC165E] Random Isolation 题解

[ARC165E] Random Isolation 题解

时间:2023-12-08 09:44:05浏览次数:32  
标签:ch int 题解 Random read 1ll siz fac Isolation

题目链接

点击打开链接

题目解法

略有些套路的概率题,不过中间的把操作序列看成排列的操作还是很妙的

首先套路的考虑期望的线性性,有两个方式:把贡献放在点上或点集上,这里采用后面的方式做
对于每一个树上的集合 \(S\),假设大小为 \(n\),相邻的点为 \(m\)
考虑这个集合独立的限制为:相邻的 \(m\) 个点在点集 \(S\) 中的所有点被删之前删,即把这些数看成排列,前 \(n\) 个数和后 \(m\) 个数是什么已经固定了,只需要内部排列,不难得到概率为 \(\frac{n!m!}{(n+m)!}\)
我们只需要求出点对 \((n,m)\) 的方案数,然后统计答案即可
不难用树形 \(dp\) 维护
时间复杂度 \(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 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=110,P=998244353;
int n,k,f[N][N][N],ans,g[N][N];
int fac[N],ifac[N],siz[N];
int e[N<<1],h[N],ne[N<<1],idx;
inline void inc(int &x,int y){ x+=y;if(x>=P) x-=P;}
void add(int x,int y){ e[idx]=y,ne[idx]=h[x],h[x]=idx++;}
void dfs(int u,int fa){
    siz[u]=1,f[u][1][0]=1;
    for(int i=h[u];~i;i=ne[i]){
        int v=e[i];if(v==fa) continue;
        dfs(v,u);
        F(j,1,siz[u]+siz[v]) F(k,0,siz[u]+siz[v]) g[j][k]=0;
        //cut 
        F(j,1,siz[u]) DF(k,siz[u],1) inc(g[j][k],f[u][j][k-1]);
        //do not cut
        F(j,1,siz[u]) F(k,1,siz[v]) F(p,0,siz[u]) F(q,0,siz[v]) inc(g[j+k][p+q],1ll*f[u][j][p]*f[v][k][q]%P);
        siz[u]+=siz[v];
        F(j,1,siz[u]) F(k,0,siz[u]) f[u][j][k]=g[j][k]; 
    }
    F(j,k+1,siz[u]) F(q,0,siz[u]) if(f[u][j][q]){
        int nq=q+(u!=1);
        inc(ans,1ll*f[u][j][q]*fac[j]%P*fac[nq]%P*ifac[j+nq]%P);
    }
}
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;
}
int main(){
    n=read(),k=read();
    ms(h,-1);
    F(i,1,n-1){
        int x=read(),y=read();
        add(x,y),add(y,x);
    }
    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;
    dfs(1,-1);
    printf("%d\n",ans);
    fprintf(stderr,"%d ms\n",int(1e3*clock()/CLOCKS_PER_SEC));
    return 0;
}

标签:ch,int,题解,Random,read,1ll,siz,fac,Isolation
From: https://www.cnblogs.com/Farmer-djx/p/17884485.html

相关文章

  • B4185. LPI-IBWA:Predicting lncRNA-protein Interactions Based on Improved Bi-Ran
    B4185.LPI-IBWA:PredictinglncRNA-proteinInteractionsBasedonImprovedBi-RandomWalkAlgorithmMinzhuXie1,HaoWang1 andRuijieXi11HunanNormalUniversityAbstract:Manystudieshaveshownthatlong-chainnoncodingRNAs(lncRNAs)areinvolvedinav......
  • Emiya今天的饭 题解
    题目考虑条件主要食材最大的不超过总菜数的一半,不好处理,但存在主要食材最大的超过总菜数的一半是好处理的,容斥即可。首先计算所有情况,由于题目要求每个烹饪方式最多使用一次,很明显可以记\(g_i\)表示前\(i\)种烹饪方式的方案数。\[g_i=g_{i-1}+g_{i-1}\times\sum_{j=1}^......
  • 虚拟机运行Hadoop | 各种问题解决的心路历程
    ps:完成大数据技术实验报告的过程,出项各种稀奇古怪的问题。(知道这叫什么吗?经济基础决定上层建筑,我当时配置可能留下了一堆隐患,总之如果有同样的问题,希望可以帮到你)一、虚拟机网络连接不通的各种情况我这里遇到的是,三台虚拟机,两台piing百度不同原因:改了下内存,重启就又未知的网......
  • 【luogu题解】U388218 数数
    数数题目描述给定n个不超过1.5×10⁹的自然数。求这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。输入格式输入的第1行是整数n,表示自然数的个数。第2行到第n+1行每行一个自然数。输出格式输出文件包含m行(m为n个自然数中不相同数的个......
  • [ARC121F] Logical Operations on Tree 题解
    题目链接点击打开链接题目解法比较好的题首先要发现一个性质是:先删AND边,再删OR边最优小证一下:分类讨论AND边两端的数字情况\(0\&0\)左右两端虽然可能可以把\(1\)OR过来,但这种情况先做\(\&\),也一定可以OR得到\(1\)\(0\&1\)左边可能可以\(OR\)得到\(1......
  • T403510 平面划分(Hard) 题解
    LinkT403510平面划分(Hard)Question平面上由\(n\)条这样的折线所界定区域的最大的个数\(Z_n\)是多少。Solution先思考一个简单的问题平面上\(n\)条直线所界定的区域最大个数\(L_n\)是多少?我们考虑假设已经有\(n-1\)条直线,我们需要画一条直线,这条直线最多和\(n......
  • isolation独立层叠上下文用例
    1.图片显示在文字下方,背景上方只需要在容器加上.card{position:relative;isolation:isolate;}详细可参考 [译]你需要知道的CSS属性isolation,原文 TheCSSpropertyyoudidn'tknowyouneeded 2.隔离mix-blend-mode就是使得mix-blend-mode失效,在多个层级......
  • 【题解】CodeForces 1902F Trees and XOR Queries Again
    传送门:https://codeforces.com/contest/1902/problem/F数据结构题,这里讲两种思路。$ST$表思路:判定“从若干个数中能否取出其中一些,使得异或和为$x$”的问题,第一时间想到线性基,本题要做的显然就是快速求出询问路径上所有数的线性基。两组数的线性基可以合并,方法为“暴力将......
  • [ARC106E] Medals 题解
    题目链接题目链接题目解法感觉不难啊,怎么想到网络流和\(hall\)定理后面就屁都没想到呢首先一眼网络流先二分答案考虑一个朴素的建图方法是:把每个人拆成\(k\)个点,然后往在的天连边,跑最大流,满流即合法可以发现,跑网络流对这道题还说没有必要,因为只要判是否有完美匹配不难......
  • 【UVA 101】The Blocks Problem 题解(模拟+向量)
    计算机科学的许多领域使用简单、抽象的领域进行分析和实证研究。例如,早期的人工智能规划和机器人研究(STRIPS)使用了一个区块世界,其中机器人arm执行涉及块操作的任务。在这个问题中,您将在某些规则和约束下对一个简单的块世界进行建模。相当地与确定如何达到指定状态相比,您将“编程......