• 51Nod


    B国拥有n个城市,其交通系统呈树状结构,即任意两个城市存在且仅存在一条交通线将其连接。A国是B国的敌国企图秘密发射导弹打击B国的交通线,现假设每条交通线都有50%的概率被炸毁,B国希望知道在被炸毁之后,剩下联通块的个数的期望是多少?

    Input一个数n(2<=n<=100000) 接下来n-1行,每行两个数x,y表示一条交通线。(1<=x,y<=n) 数据保证其交通系统构成一棵树。Output一行一个数,表示答案乘2^(n-1)后对1,000,000,007取模后的值。Sample Input

    3
    1 2
    1 3

    Sample Output

    8

    题解:

    期望怎么求?(百度上的例子:https://baike.baidu.com/item/数学期望/5362790?fr=aladdin)

    由于题中明确说了是树,所以没断一条边,连通块数量就加一,而且断边的概率为0.5,那么就有连通的期望为E = (n-1)*0.5+1(因为连通块个数最小为1,所以最后肯定要加一个1),显然这个是可能给小数的,但是给他乘以了2^(n-1),所以就变成了ans = (n+1)*2^(n-2)

    代码:

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<iostream>
     4 #include<algorithm>
     5 #include<math.h>
     6 #include<vector>
     7 #include<queue>
     8 #include<stack>
     9 #include<map>
    10 using namespace std;
    11 typedef long long ll;
    12 const int maxn=5e4+10;
    13 const int INF=0x3f3f3f3f;
    14 const double eps=1e-10;
    15 const int mod = 1e9+7;
    16 #define mt(A,B) memset(A,B,sizeof(A))
    17 #define lson l,m,rt*2
    18 #define rson m+1,r,rt*2+1
    19 int main()
    20 {
    21     ll n;
    22     while(~scanf("%lld", &n))
    23     {
    24         ll a,b;
    25         ll k=n+1;
    26         for(ll i=1; i<n; i++)
    27             scanf("%lld%lld",&a,&b);
    28         for(ll i=0; i<n-2;i++)
    29             k=k*2%mod;
    30         printf("%lld
    ",k);
    31     }
    32     return 0;
    33 }
  • 相关阅读:
    SSRF
    【Floyd(并非水题orz)】BZOJ4093-[Usaco2013 Dec]Vacation Planning
    【SPFA+二分答案】BZOJ1614- [Usaco2007 Jan]Telephone Lines架设电话线
    【刷水-贪心】BZOJ1629-[Usaco2007 Demo]Cow Acrobats
    【刷水-二分答案】BZOJ1650 & BZOJ1639
    【UOJ244】[UER7]短路
    【尺取法好题】POJ2566-Bound Found
    【尺取法】POJ3061 & POJ3320
    【hash】BZOJ3751-[NOIP2014]解方程
    【最小点覆盖】POJ3041-Asteroids
  • 原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/12771649.html
Copyright © 2020-2023  润新知