CF1528E Mashtali and Hagh Trees 題解


Codeforces
Luogu

P.S.

上文

Solution.

觀察三條件,抽象出樹可能是以下三種

  1. 有根外向樹
  2. 有根內向樹
  3. 內向外向拼起來

設有根且根度數為 \(2\) 的方案數是 \(\{F_i\}\)

  1. 根度為 \(1\),為 \(F_{n-1}\)
  2. 根的點度為 \(2\),且左右深度不相同,為 \(F_{n-1}\times\left(\sum_{i=0}^{n-2}F_i\right)\)
  3. 根的點度為 \(2\),且左右深度相同,為 \(\cfrac{F_{n-1}\times(F_{n-1}+1)}{2}\)

\[\therefore \begin{aligned} F_n&=F_{n-1}+F_{n-1}\times\left(\sum_{i=0}^{n-2}F_i\right)+\cfrac{F_{n-1}\times(F_{n-1}+1)}{2}\\ &=F_{n-1}+F_{n-1}\times\left(\sum_{i=0}^{n-2}F_i\right)+\dbinom {F_{n-1}+1}2 \end{aligned} \]

所以我們可以在 \(O(n)\) 的復雜度內求出 \(\{F_i\}\)

統計答案,發現 12 都分別有下式種方案。

\[F_n+F_{n-1}\times\dbinom{1+\sum_{i=0}^{n-2}F_i}2+\left(\sum_{i=0}^{n-2}F_{i}\right)\times\dbinom{F_{n-1}+1}2+\dbinom{F_{n-1}+2}3 \]

但是我們需要注意的是一條鏈的情況 12 會算重,所以兩倍后要減 \(1\)

與此同時,第三種情況的計算比較復雜。
首先左邊的有根內向樹是 \(F_i-1\),因為不能退化成鏈。
右邊的是 \(F_{n-i-1}-F_{n-i-2}\),因為根度不能為一。
所以答案是 \(\sum_{i=0}^{n-1}(F_i-1)\times(F_{n-i-1}-F_{n-i-2})\)

最后答案加一下就好了。

Coding.

點擊展開代碼
//是啊……你就是那只鬼了……所以被你碰到以后,就輪到我變成鬼了{{{
#include<bits/stdc++.h>
using namespace std;typedef long long ll;
template<typename T>inline void read(T &x)
{
	x=0;char c=getchar(),f=0;
	for(;c<48||c>57;c=getchar()) if(!(c^45)) f=1;
	for(;c>=48&&c<=57;c=getchar()) x=(x<<1)+(x<<3)+(c^48);
	f?x=-x:x;
}/*}}}*/
const int P=998244353;int n,F[1000005],s[1000005];
inline int ksm(int x,int q=P-2) {int r=1;for(;q;q>>=1,x=1ll*x*x%P) if(q&1) r=1ll*r*x%P;return r;}
inline int C2(int x) {return 1ll*x*(x+1)%P*499122177%P;}
inline int C3(int x) {return 1ll*x*(x+1)%P*(x+2)%P*166374059%P;}
int main()
{
	read(n),F[0]=1,F[1]=2,s[0]=1,s[1]=3;int rs=0;
	if(n==1) return puts("5"),0;else if(n==2) return puts("31"),0;
	for(int i=2;i<=n;i++) F[i]=(F[i-1]+1ll*F[i-1]*s[i-2]+C2(F[i-1]))%P,s[i]=(s[i-1]+F[i])%P;
	rs=(2ll*F[n]-1+2ll*C3(F[n-1])+2ll*F[n-1]*C2(s[n-2])+2ll*s[n-2]*C2(F[n-1]))%P;
	for(int i=0;i<n-1;i++) rs=(rs+1ll*(F[i]-1)*(F[n-i-1]-F[n-i-2]))%P;
	return printf("%d\n",rs),0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM