首页 > 其他分享 >ARC171C

ARC171C

时间:2024-02-29 22:45:13浏览次数:22  
标签:方案 ARC171C 相同 对于 cdot 答案 操作

题面

给定一棵 \(n\) 个节点的树,每个点有个权值 \(a_i\),初始时 \(a_i=i\)。

你可以执行任意操作:选择一条边 \((u,v)\),交换 \(a_u\) 和 \(a_v\),并将这条边删掉。

问通过上述操作,最后 \((a_1,a_2,\cdots,a_n)\) 有多少种不同的排列方式,答案对 \(998244353\) 取模。

数据范围:\(n\le 3\times 10^3\) 。

题解

算是一个结论题,首先对于两个方案,如果连操作的边的集合都不相同,那么这两种方案得到的序列肯定不一样。

然后再看还有什么情况。对于两个方案,对于树上的每一个点 \(x\),如果点 \(x\) 周边要操作的边的相对相对顺序都一样,那么这两种方案得到的 \(a\) 就相同,否则就不同。

证明?大致是只要操作时两边的点权都相同,那么最终产生的 \(a\) 肯定相同。

所以考虑对于一种 操作的边的集合 计算答案。

这里又是一个结论?就是无论怎么确定 \(x\) 周边的边的相对操作顺序,都可以找到一个总的边的操作顺序,因为对于边 \(a,b,c\) ,不会出现 \((a,b),(b,c),(a,c)\) 有相同端点,从而出现 \(t_a<t_b,t_b<t_c,t_a>t_c\) 的情况。

所以答案就是 \(\sum_{E}\prod_{i=1}^n deg_{i,E}!\),其中 \(deg_{i,E}\) 表示节点 \(i\) 在边集 \(E\) 中的度数。

然后考虑dp求答案,设 \(f_{x,i,0/1}\) 表示只考虑以 \(x\) 为根的子树中,与 \(x\) 相连的所有边中选了 \(i\) 条,且 \(x\) 与其父亲之间的边有没有断的方案数。有转移:

\[f_{x,i,0}\leftarrow f_{x,i,0}\cdot g_{y,0}+f_{x,i−1,0}\cdot i\cdot g_{y,1}\\ f_{x,i,1}\leftarrow f_{x,i,1}\cdot g_{y,0}+f_{x,i−1,0}\cdot i\cdot g_{y,1} \]

启发

  • 对于题面问题,考虑求最终方案数时,关键是看每一条边操作时两点的点权。
  • 在考虑是否存在一个排列,并且满足一些数的相对大小时,看会不会出现 \(t_a<t_b,t_b<t_c,t_a>t_c\) 就行了。

标签:方案,ARC171C,相同,对于,cdot,答案,操作
From: https://www.cnblogs.com/qwq-123/p/18045749

相关文章

  • 题解 ARC171C【Swap on Tree】
    每棵子树内只可能有至多一个外来的数,且外来的数是多少并不影响方案数,因此考虑设\(f_{u,i,0/1}\)表示考虑以\(u\)为根的子树,与\(u\)相连的所有边中断了\(i\)条,且\(u\)与其父亲之间的边有没有断的方案数。设\(g_{u,c}=\sumf_{u,i,c}\)。每个节点的初始状态是\(f_{u,0,......