基准时间限制:1 秒 空间限制:131072 KB 分值: 20
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取模后的值。
Input示例
3
1 2
1 3
Output示例
8
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1632
分析:
下面给出AC代码:
1 #include <bits/stdc++.h>
2 using namespace std;
3 typedef long long ll;
4 const ll mod=1000000007;
5 inline ll read()
6 {
7 ll x=0,f=1;
8 char ch=getchar();
9 while(ch<'0'||ch>'9')
10 {
11 if(ch=='-')
12 f=-1;
13 ch=getchar();
14 }
15 while(ch>='0'&&ch<='9')
16 {
17 x=x*10+ch-'0';
18 ch=getchar();
19 }
20 return x*f;
21 }
22 ll n,x,y;
23 ll a[100010]={0,1};
24 ll qpow(ll x,ll p)
25 {
26 ll ret=1;
27 for(;p;p>>=1,x=x*x%mod)
28 {
29 if(p&1)
30 ret=ret*x%mod;
31 }
32 return ret;
33 }
34 int main()
35 {
36 n=read();
37 ll ans=0;
38 for(int i=1;i<n;i++)
39 {
40 x=read();
41 y=read();
42 }
43 for(ll i=2;i<=100001;i++)
44 a[i]=2*a[i-1]+qpow(2,i-2),a[i]%=mod;
45 cout<<a[n]<<endl;
46 return 0;
47 }