/// In the name of Allah
#include <bits/stdc++.h>
using namespace std;
#define Fast ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define RFOR(i,a) for(int i = a-1; i >= 0; i--)
#define FOR(i,a) for(int i = 0; i < a; i++)
#define se second
#define fi first
#define sz(x) (int)x.size()
#define upp upper_bound
#define low lower_bound
#define pub push_back
#define all(x) x.begin(),x.end()
#define mp make_pair
typedef double ld;
typedef long long ll;
typedef pair<ll,ll> pll;
typedef pair<int,int> pii;
const ll mod = 1'000'000'007;
const int N = 200'000 + 5;
const int Z = 500'000 + 5;
ll F[Z], _F[Z], ans;
int n, r, q, H[N], S[N], dad[N], st[N], en[N], R[N], B[N], timer = 1, p = 0;
set<int> X[N];
vector<int> G[N];
inline ll Pow(ll a, int b)
{
ll res = 1LL;
while(b)
{
if(b&1)res = res*a%mod;
b >>= 1;
a = a*a%mod;
}
return res;
}
inline ll inv(int x){return Pow(x,mod-2);}
inline ll C(int x, int y)
{
if(x > y || x < 0)return 0;
return F[y]*_F[x]%mod*_F[y-x]%mod;
}
struct fen
{
int G[N];
fen(){memset(G,0,sizeof(G));}
inline void inc(int p, int x)
{
while(p < N)
{
G[p] += x;
p += p&-p;
}
}
inline int get(int p)
{
int s = 0;
while(p)
{
s += G[p];
p -= p&-p;
}
return s;
}
}tags, Free;
int dfs_s(int v, int d, int h)
{
st[v] = timer++;
H[v] = h;
dad[v] = d;
S[v] = 1;
for(auto u: G[v])if(u != d)S[v] += dfs_s(u,v,h+1);
en[v] = timer;
return S[v];
}
void dfs_hld(int v, int top, int nam)
{
R[v] = nam;
B[v] = top;
pii MAX = mp(-1,-2);
for(auto u: G[v])if(u != dad[v])MAX = max(MAX,mp(S[u],u));
for(auto u: G[v])if(u != dad[v])
{
if(MAX.se == u)dfs_hld(u,top,nam);
else dfs_hld(u,u,p++);
}
}
int main()
{
Fast
F[0] = 1;
for(ll i = 1; i < Z; i++)F[i] = i*F[i-1]%mod;
FOR(i,Z)_F[i] = inv(F[i]);
cin >> n >> r;
int u, v;
FOR(i,n-1)
{
cin >> u >> v;
u--; v--;
G[u].pub(v); G[v].pub(u);
}
dfs_s(0,0,0);
dfs_hld(0,0,p++);
tags.inc(st[0],r);
Free.inc(st[0],n);
ans = C(r,n+r-1);
cout << ans;
return 0;
}
// thank god
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
248 ms |
43400 KB |
Output is correct |
2 |
Correct |
256 ms |
43364 KB |
Output is correct |
3 |
Correct |
258 ms |
43304 KB |
Output is correct |
4 |
Correct |
257 ms |
43500 KB |
Output is correct |
5 |
Correct |
246 ms |
39492 KB |
Output is correct |
6 |
Correct |
91 ms |
24132 KB |
Output is correct |
7 |
Correct |
91 ms |
23908 KB |
Output is correct |
8 |
Correct |
91 ms |
24052 KB |
Output is correct |
9 |
Correct |
250 ms |
35772 KB |
Output is correct |
10 |
Correct |
252 ms |
35704 KB |
Output is correct |
11 |
Correct |
287 ms |
35788 KB |
Output is correct |
12 |
Correct |
235 ms |
35140 KB |
Output is correct |
13 |
Correct |
245 ms |
42176 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
89 ms |
23748 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
266 ms |
42632 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
285 ms |
35652 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
248 ms |
43400 KB |
Output is correct |
2 |
Correct |
256 ms |
43364 KB |
Output is correct |
3 |
Correct |
258 ms |
43304 KB |
Output is correct |
4 |
Correct |
257 ms |
43500 KB |
Output is correct |
5 |
Correct |
246 ms |
39492 KB |
Output is correct |
6 |
Correct |
91 ms |
24132 KB |
Output is correct |
7 |
Correct |
91 ms |
23908 KB |
Output is correct |
8 |
Correct |
91 ms |
24052 KB |
Output is correct |
9 |
Correct |
250 ms |
35772 KB |
Output is correct |
10 |
Correct |
252 ms |
35704 KB |
Output is correct |
11 |
Correct |
287 ms |
35788 KB |
Output is correct |
12 |
Correct |
235 ms |
35140 KB |
Output is correct |
13 |
Correct |
245 ms |
42176 KB |
Output is correct |
14 |
Incorrect |
89 ms |
23748 KB |
Output isn't correct |
15 |
Halted |
0 ms |
0 KB |
- |