/*
51 nod 1632
中文题
唯一要注意的是
它要求的是剩下的联通块的期望
期望公式:
E(x)=∑Xi*Pi
X为随机变量P为概率
所以这题我们要求的结果是
(C(n-1,0)*1/2^(n-1)+C(n-1,1)*2/2^(n-1)+C(n-1,3)*4/2^(n-1)+…………+C(n-1,n-1)*n/2^(n-1))*2^(n-1)%mod
因为是联通块的期望
所以每少一条路就多一个连通块
将上式化简可得
(C(n-1,0)*1+C(n-1,1)*2+C(n-1,3)*4+…………+C(n-1,n-1)*n)%mod
直接求是TLE的
所以只能打表找规律(其实能证明过程有点复杂就是了)
设我们要求的为An
A(n+1)-2*An=C(n-1,0)+C(n-1,1)+C(n-1,3)+…………+C(n-1,n-1)=2^(n-1)
A(n+1)=2*An+2^(n-1)
An=2*A(n-1)+2^(n-2)
找到的结果就是
ans[1]=1
ans[i]=2*ans[i-1]+2^(i-2)
2^(i-2)用快速幂
*/
#include<iostream>
#include<algorithm>
#include<string.h>
#include<string>
#include<stdio.h>
#include<math.h>
#define ll long long
#define p 1000000007
using namespace std;
int ans[100005];
ll Pow(ll a,ll n)
{
ll x = a;
ll res = 1;
while(n)
{
if(n & 1)
res=((ll)res*(ll)x)%p;
n>>= 1;
x=((ll)x*(ll)x)%p;
}
return res;
}
void init()
{
memset(ans,0,sizeof(ans));
ans[1]=1;
for(int i=2; i<=100004; i++)
{
ans[i]=(2*ans[i-1])%p+Pow(2,i-2);
ans[i]=ans[i]%p;
}
}
int main()
{
init();
int n;
while(cin>>n)
{
for(int i=1; i<=n-1; i++)
{
int a,b;
cin>>a>>b;
}
cout<<ans[n]<<endl;
}
return 0;
}
51 nod 1632
中文题
唯一要注意的是
它要求的是剩下的联通块的期望
期望公式:
E(x)=∑Xi*Pi
X为随机变量P为概率
所以这题我们要求的结果是
(C(n-1,0)*1/2^(n-1)+C(n-1,1)*2/2^(n-1)+C(n-1,3)*4/2^(n-1)+…………+C(n-1,n-1)*n/2^(n-1))*2^(n-1)%mod
因为是联通块的期望
所以每少一条路就多一个连通块
将上式化简可得
(C(n-1,0)*1+C(n-1,1)*2+C(n-1,3)*4+…………+C(n-1,n-1)*n)%mod
直接求是TLE的
所以只能打表找规律(其实能证明过程有点复杂就是了)
设我们要求的为An
A(n+1)-2*An=C(n-1,0)+C(n-1,1)+C(n-1,3)+…………+C(n-1,n-1)=2^(n-1)
A(n+1)=2*An+2^(n-1)
An=2*A(n-1)+2^(n-2)
找到的结果就是
ans[1]=1
ans[i]=2*ans[i-1]+2^(i-2)
2^(i-2)用快速幂
*/
#include<iostream>
#include<algorithm>
#include<string.h>
#include<string>
#include<stdio.h>
#include<math.h>
#define ll long long
#define p 1000000007
using namespace std;
int ans[100005];
ll Pow(ll a,ll n)
{
ll x = a;
ll res = 1;
while(n)
{
if(n & 1)
res=((ll)res*(ll)x)%p;
n>>= 1;
x=((ll)x*(ll)x)%p;
}
return res;
}
void init()
{
memset(ans,0,sizeof(ans));
ans[1]=1;
for(int i=2; i<=100004; i++)
{
ans[i]=(2*ans[i-1])%p+Pow(2,i-2);
ans[i]=ans[i]%p;
}
}
int main()
{
init();
int n;
while(cin>>n)
{
for(int i=1; i<=n-1; i++)
{
int a,b;
cin>>a>>b;
}
cout<<ans[n]<<endl;
}
return 0;
}