T1
很思维的题。
我们把所有的度数小于3的点全部都缩掉然后分情况给边和去掉的边的答案乘上对应的贡献即可。
用\(set\)和\(bfs\)来维护就可以了。
时间复杂度\(O(nlogn)\)
代码比较麻烦。
学到一招:
\(mutable\)型:易变型变量。
如果\(set\)中的元素的大小符定义和这个元素中含有的某一个\(mutable\)型变量无关的话,那么这个变量是可以直接在\(set\)中改变的。
这样就大大节省了常数。
使得我们没有必要去出再加入元素。
T2
如果我们把每一天的个数都枚举出来的话,相当于是在枚举一个长度为\(m\),和为\(n\)的序列\(a\)。
有:
\[a_i\in[0,n]
\]
\[\begin{aligned}
ans&=\prod\limits_{\{a\},\sum a_i =n}(ui+v)^{a_i}\\
&=\sum\limits_{i=0}^{n}(u+v)^i(2u+v)^{n-i}\\
\end{aligned}
\]
我们设:
\[w_i=ui+v
\]
那么\(m\)天答案的生成函数就是:
\[\begin{aligned}
F_m(x)&=\prod\limits_{i=1}^{m}\sum\limits_{j=0}^{+\infty}(w_ix)^j\\
&=\prod\limits_{i=1}^{m}\frac{1}{1-w_ix}\\
\end{aligned}
\]
观察一下两天的情况:
\[\frac{1}{1-w_1x}\frac{1}{1-w_2x}=\left(\frac{1}{1-w_1x}-\frac{1}{1-w_2x}\right)\frac{1}{ux}=\frac{\frac{1}{ux}}{1-w_1x}-\frac{\frac{1}{ux}}{1-w_2x}
\]
相当于是这种形式的:
\[F_m(x)=\sum\limits_{i=1}^{m}a_{m,i}\frac{1}{1-w_ix}
\]
那么我们做一个增量构造:
\[\begin{aligned}
F_m(x)&=F_{m-1}(x)\frac{1}{1-w_mx}\\
&=\sum\limits_{i=1}^{m-1}a_{m-1,i}\frac{1}{1-w_ix}\frac{1}{1-w_mx}\\
&=\sum\limits_{i=1}^{m-1}a_{m-1,i}\left(\frac{1}{1-w_ix}-\frac{1}{1-w_mx}\right)\frac{1}{(i-m)ux}\\
&=\frac{1}{(ux)^{m-1}}\sum\limits_{i=1}^{m-1}\frac{a_{m-1,i}}{(1-w_ix)(i-m)}+\frac{a_{m-1,i}}{(1-w_mx)(m-i)}\\
\end{aligned}
\]
那么我们可以得到\(a_{i,j}\)的递推式了。
\[a_{i,j}=\begin{cases}
\frac{a_{i-1,j}}{j-i}&i\not =j\\
\sum\limits_{j=1}^{m-1}\frac{a_{i-1,j}}{i-j}&i=j\\
\end{cases}\]
然后设\(g_i=a_{i,i}\)
那么有:
\[a_{i,j}=g_j\frac{(-1)^{i-j}}{(i-j)!}
\]
用上面的递推公式就可以得到这个式子。
这样我们把\(a_{i,j}\)代入来求其他的\(g\),使得用\(g\)求出\(g\),这样我们可以得到其生成函数的递推式。
\[g_i=\sum\limits_{j=1}^{i-1}\frac{a_{i-1,j}}{i-j}=\sum\limits_{j=1}^{m-1}\frac{g_j(-1)^{i-j-1}}{(i-j)!}
\]
设\(G(x)=\sum\limits_{i=1}^{+\infty}g_ix^i\),\(R(x)=\sum\limits_{i=1}^{+\infty}\frac{(-1)^{i-1}}{i!}=1-e^{-x}\)
这样的话根据上面的自卷积式就有:
\[G(x)=G(x)R(x)+x
\]
因为一次项没有值所以要\(+x\)。
再推一下可以得到:
\[e^{-x}G(x)=x
\]
那么:
\[G(x)=xe^x
\]
所以:
\[g_i=[x^i]G(x)=(i-1)!
\]
这样我们就可以考虑直接统计答案了。
\[\begin{aligned}
ans&=[x^n]F(x)\\
&=\frac{1}{(ux)^{m-1}}[x^n]\left(\sum\limits_{i=1}^{m}\frac{a_{m,i}}{1-w_ix}\right)\\
&=\frac{1}{u^{m-1}}[x^{n+m-1}]\left(\sum\limits_{i=1}^{g_i}\frac{(-1)^{m-i}}{(m-i)!}\sum\limits_{j=0}^{+\infty}(w_ix)^j\right)\\
&=\frac{1}{u^{m-1}}\sum\limits_{i=1}^{m}\frac{(-1)^{m-i}(ui+v)^{n+m-1}}{(i-1)!(m-i)!}\\
\end{aligned}
\]
这样的话我们就可以直接\(O(mlog10^9)\)地统计答案了。
题解里面是一种容斥的方法。
虽然不好想但是好像挺好推的。
我这个则是生成函数+暴力推式法很好想但是很不好推。
T3
一个网络流。
个人的理解是:
这种建图方式是使得两侧都没有被割的时候中间流过的一条表示随意选某种颜色皆可。
因为两侧这时的流量必然大于等于1.
代表着可以随意选择。
割掉两边的表示某一天是必然选这种颜色的。
这样可以保证二分图上最大匹配个数最少。