提出 #9220560
ソースコード 拡げる
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
#define fr(i,n) for(int i=0;i<(n);++i)
#define Fr(i,n) for(int i=1;i<=(n);++i)
#define ifr(i,n) for(int i=(n)-1;i>=0;--i)
#define iFr(i,n) for(int i=(n);i>0;--i)
struct modint{
using i64=int_fast64_t;
i64 a;
static constexpr i64 MOD=1e9+7;
modint(){a=0;}
modint(i64 a_){
a=a_%MOD;
if(a<0) a+=MOD;
}
modint inv()const{
i64 n=1,m=MOD-2,A=a;
while(m){
if(m&1)(n*=A)%=MOD;
(A*=A)%=MOD;
m>>=1;
}
modint y(n);
return y;
}
bool operator==(const modint& x){
return a==x.a;
}
bool operator!=(const modint& x){
return a!=x.a;
}
modint& operator=(const modint& x){
a=x.a;
return *this;
}
modint operator+(const modint& x){
modint y;
y.a=a+x.a;
if(y.a>MOD) y.a-=MOD;
return y;
}
modint operator-(const modint& x){
modint y;
y.a=a-x.a;
if(y.a<0) y.a+=MOD;
return y;
}
modint operator*(const modint& x){
modint y;
y.a=(a*x.a)%MOD;
return y;
}
modint operator/(const modint& x){
modint y;
y.a=(a*x.inv().a)%MOD;
return y;
}
modint& operator+=(const modint& x){
a+=x.a;
if(a>=MOD) a-=MOD;
return *this;
}
modint& operator-=(const modint& x){
a-=x.a;
if(a<0) a+=MOD;
return *this;
}
modint& operator*=(const modint& x){
(a*=x.a)%=MOD;
return *this;
}
modint& operator/=(const modint& x){
(a*=x.inv().a)%=MOD;
return *this;
}
};
istream& operator>>(istream &in,modint& x){
int_fast64_t a_;
in>>a_;
modint y(a_);
x=y;
return in;
}
ostream& operator<<(ostream &out,const modint& x){
out<<x.a;
return out;
}
modint pwr(int_fast64_t a,int_fast64_t b){
modint _;
int_fast64_t n=1,A=a;
while(b){
if(b&1) (n*=A)%=modint::MOD;
(A*=A)%=modint::MOD;
b>>=1;
}
_.a=n;
return _;
}
struct tree{
size_t n,r,md;
vector<vector<int>> e;
vector<int> pa,d,sz;
explicit tree(int n_){
n=n_;
e.resize(n);
}
void add(int a,int b){
e[a].emplace_back(b);
e[b].emplace_back(a);
}
void r_dfs(int i,int p=-1,int D=0){
sz[i]=1;
pa[i]=p;d[i]=D;md=max(md,(size_t)D);++D;
for(auto j:e[i]) if(j!=p){
r_dfs(j,i,D);
sz[i]+=sz[j];
}
}
void r_i(int r_){
pa.resize(n);d.resize(n);sz.resize(n);r=r_;md=0;
r_dfs(r);
}
int r2(){
r_i(0);
int m=0,M=0;
fr(i,n) m=max(m,d[i]);
fr(i,n) if(d[i]==m) M=i;
pa.clear(),d.clear();
r_i(M);
m=0;
fr(i,n) m=max(m,d[i]);
return m;
}
modint solve(int n,int i){
modint c;
for(auto j:e[i]) if(sz[i]>sz[j]){
c+=pwr(2,sz[j])-1;
}
c+=pwr(2,n-sz[i]);
return pwr(2,n-1)-c;
}
};
int main(){
cin.tie(nullptr);
ios::sync_with_stdio(false);
istream& in(cin);
ostream& out(cout);
int n,a,b;
in>>n;
tree t(n);
fr(i,n-1){
in>>a>>b;
t.add(--a,--b);
}
t.r_i(0);
modint ans{};
fr(i,n) ans+=t.solve(n,i);
ans/=pwr(2,n);
cout<<ans<<endl;
}
提出情報
| 提出日時 |
|
| 問題 |
F - Surrounded Nodes |
| ユーザ |
Motsu_xe |
| 言語 |
C++14 (GCC 5.4.1) |
| 得点 |
600 |
| コード長 |
3597 Byte |
| 結果 |
AC |
| 実行時間 |
168 ms |
| メモリ |
18944 KiB |
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
600 / 600 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
sample_01, sample_02, sample_03, sample_04 |
| All |
min_01, path1_01, path1_02, path1_03, path2_01, path2_02, path2_03, random_01, random_02, random_03, random_04, random_05, random_06, random_07, random_08, random_09, random_10, random_11, random_12, random_13, sample_01, sample_02, sample_03, sample_04, star1_01, star1_02, star1_03, star2_01, star2_02, star2_03 |
| ケース名 |
結果 |
実行時間 |
メモリ |
| min_01 |
AC |
1 ms |
256 KiB |
| path1_01 |
AC |
145 ms |
16128 KiB |
| path1_02 |
AC |
157 ms |
17152 KiB |
| path1_03 |
AC |
130 ms |
17024 KiB |
| path2_01 |
AC |
153 ms |
18944 KiB |
| path2_02 |
AC |
168 ms |
17152 KiB |
| path2_03 |
AC |
158 ms |
18816 KiB |
| random_01 |
AC |
9 ms |
1280 KiB |
| random_02 |
AC |
7 ms |
1024 KiB |
| random_03 |
AC |
2 ms |
384 KiB |
| random_04 |
AC |
5 ms |
896 KiB |
| random_05 |
AC |
2 ms |
512 KiB |
| random_06 |
AC |
100 ms |
10624 KiB |
| random_07 |
AC |
95 ms |
10368 KiB |
| random_08 |
AC |
109 ms |
11648 KiB |
| random_09 |
AC |
119 ms |
13184 KiB |
| random_10 |
AC |
71 ms |
8320 KiB |
| random_11 |
AC |
130 ms |
13824 KiB |
| random_12 |
AC |
126 ms |
13824 KiB |
| random_13 |
AC |
131 ms |
13824 KiB |
| sample_01 |
AC |
1 ms |
256 KiB |
| sample_02 |
AC |
1 ms |
256 KiB |
| sample_03 |
AC |
1 ms |
256 KiB |
| sample_04 |
AC |
1 ms |
256 KiB |
| star1_01 |
AC |
81 ms |
12404 KiB |
| star1_02 |
AC |
48 ms |
7544 KiB |
| star1_03 |
AC |
52 ms |
7800 KiB |
| star2_01 |
AC |
62 ms |
8824 KiB |
| star2_02 |
AC |
87 ms |
12788 KiB |
| star2_03 |
AC |
86 ms |
12148 KiB |