题目大意:
给两个树,求环的个数。
题目分析:
出题人摆错题号系列。
通过画图很容易就能想到把新图拆在两个树上,在树上游走成环。
考虑DP状态F,G,T。F表示最终答案,T表示儿子不考虑父亲,G表示父亲不考虑儿子。T通过从下往上做NTT,G通过从上往下做NTT。F顺便做NTT。
最后做一下拼接就行。
代码:
1 #include2 using namespace std; 3 4 const int maxn = 4020; 5 const int mod = 998244353; 6 const int gg = 3; 7 8 int n[2],k; 9 10 vector g[2][maxn]; 11 12 int f[2][maxn][80],gi[2][maxn][80],T[2][maxn][80]; 13 14 int C[100][100]; 15 16 int fast_pow(int now,int pw){ 17 int ans = 1,bit = 1,dt = now; 18 while(bit <= pw){ 19 if(bit & pw){ans = (1ll*ans*dt)%mod;} 20 bit <<=1; dt = (1ll*dt*dt)%mod; 21 } 22 return ans; 23 } 24 25 void read(){ 26 scanf("%d%d%d",&n[0],&n[1],&k); 27 for(int i=1;i >1]>>1) + ((k&1)<