51NOD 1632 B君的连通 期望计算 推公式 打表
2016-11-13 14:56
183 查看
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1632 #include<bits/stdc++.h> using namespace std; const long long MOD=1000000007; const int MAX=100007; long long Ans[MAX]; int N,a,b; /* 因为这是一棵树,所以每炸毁一条边就会产生一个联通块. 当有N个点的时候,图中共有N-1条边.所以一共有2^(N-1)种情况. 因为答案要求乘上2^(N-1)再对MOD取模的答案,所以消除了2^(N-1). Ans={ 1*C(N-1,1)*(1/(2^(N-1)))+2*C(N-1,2)*(1/(2^(N-1)))+3*C(N-1,3)*(1/(2^(N-1)))+ ... +N*C(N-1,N-1)*(1/(2^(N-1))) } * 2^(N-1). Ans= 1*C(N-1,1)+2*C(N-1,2)+3*C(N-1,3)+ ... +N*C(N-1,N-1). 然后打个表发现上述式子可以简化为: Ans[1]=1,Ans[i]=2*Ans[i-1]+2^(i-2). 用快速幂进行运算. */ long long QuickPow(long long a,long long n) { long long res=1; while (n) { if (n&1) res=(res*a)%MOD; n>>=1; a=(a*a)%MOD; } return res; } int main() { Ans[1]=1; for (int i=2;i<MAX;i++) Ans[i]=(2*Ans[i-1]+QuickPow(2,i-2))%MOD; while (cin>>N) { for (int i=1;i<N;i++) cin>>a>>b; cout<<Ans <<endl; } return 0; }
相关文章推荐
- 51NOD 1632 B君的连通(推公式)——算法马拉松16
- 51nod 1632 B君的连通
- 51Nod-1062 序列中最大的数【序列计算+打表】
- 51nod 1632 B君的连通
- 51Nod 1632 B君的连通(递归,快速幂)
- sicily 6382. 公式计算
- 51nod 1138 连续整数的和 (数学公式_转换思想,好题吧)
- 特性阻抗公式 (含微带线,带状线的计算公式)
- 游戏玩家经验计算公式
- excel VBA 公式计算结果引用问题
- zoj 3720 计算几何,期望
- 协方差的意义和计算公式
- 51nod 1138 连续整数的和(数学公式)
- 番茄零乱初学C#之计算某天是星期几[蔡勒(Zeller)公式]
- 51Nod-幸运数字(打表)
- 个人所得税征收计算公式
- 常用的计算时间复杂度的公式
- 硬盘分区之整数G计算公式
- 关于三角形面积的公式与格点多边形面积计算算法的讨论
- Excel隔行求和计算公式