T1 岛屿
https://www.gxyzoj.com/d/hzoj/p/4177
显然每个点只增加了一条边,最终每个点的度数都为2,所以最终必然是很多个环,连边的过程中,也必然是一些链和一些环
由题,蓝同色链的个数和红同色链的个数相等,所以设\(f(a,b)\)为a条红同色链,b条异色链的期望
考虑先处理异色链:
红红连红蓝为红红,异色链-1,即\(f(a,b-1)\)
蓝蓝连红蓝为蓝蓝,异色链-1,即\(f(a,b-1)\)
红蓝连红蓝为红蓝(不是自己),异色链-1,即\(f(a,b-1)\)
红蓝连自己,此时构成环,联通快数量+1,即\(f(a,b-1)+1\)
剩余的同色链相连为红蓝,即\(f(a-1,b+1)\)
所以:
\[f(a,b)=\begin{cases}\dfrac{1}{2a+b}(f(a,b-1)+1)+\dfrac{2a+b-1}{2a+b}f(a,b-1),b>0\\ f(a-1,b+1),b=0\end{cases} \]既:
\[f(a,b)=\begin{cases}\dfrac{1}{2a+b}+f(a,b-1),b>0\\ f(a-1,0)+\dfrac{1}{2a+1},b=0\end{cases} \]\(f(0,0)=0\),整理得:
\[f(x,y)=\sum_{b=1}^y \dfrac{1}{2x+b}+\sum_{a=1}^x \dfrac{1}{2a+1} \]代码:
#include<cstdio>
using namespace std;
int x,y,n;
double ans;
int main()
{
freopen("island.in","r",stdin);
freopen("island.out","w",stdout);
scanf("%d%d",&x,&y);
n=2*x+y;
for(int i=1;i<=y;i++)
{
ans+=1.0/(1.0*(2*x+i));
}
for(int i=1;i<=x;i++)
{
ans+=1.0/(1.0*(i*2-1));
}
printf("%.10lf",ans);
return 0;
}
标签:总结,比赛,dfrac,同色,2a,异色,红蓝,cases,20241021
From: https://www.cnblogs.com/wangsiqi2010916/p/18489405