# |
Author |
Problem |
Lang |
Verdict |
Time |
Memory |
Sent |
Judged |
|
60957375 |
Practice:
Zory |
995F
- 17
|
C++17 (GCC 7-32)
|
Accepted
|
265 ms
|
213176 KB
|
2019-09-21 06:29:40 |
2019-09-21 06:29:40 |
|
#include<bits/stdc++.h>
using namespace std;
namespace mine
{
typedef long long ll;
#define pr pair<int,int>
#define FR first
#define SE second
#define MP make_pair
#define PB push_back
#define vc vector
#define all(x) (x).begin(),(x).end()
#define sz(x) ((int)(x).size())
#define bin(x) (1ll<<(x))
#define GG(x) if(x) puts("error")
#define rep(i,l,r) for(int i=(l);i<=(r);i++)
ll qread()
{
ll ans=0,f=1;char c=getchar();
while(c<'0' or c>'9') {if(c=='-')f=-1;c=getchar();}
while('0'<=c and c<='9') ans=ans*10+c-'0',c=getchar();
return ans*f;
}
void write(ll num)
{
if(num<0) putchar('-'),num=-num;
if(num>=10) write(num/10);
putchar('0'+num%10);
}
void write1(ll num){write(num);putchar(' ');}
void write2(ll num){write(num);putchar('\n');}
template<typename T> void chmax(T &x,const T y) {x=(x>y?x:y);}
template<typename T> void chmin(T &x,const T y) {x=(x<y?x:y);}
ll gcd(ll x,ll y){return y?gcd(y,x%y):x;}
const int INF=0x3f3f3f3f;
const int MOD=1e9+7;
inline int mm(const int x){return x>=MOD?x-MOD:x;}
template<typename T> inline void add(T &x,const T y){x=mm(x+y);}
inline ll qpower(ll x,ll e)
{
ll ans=1;GG(e<0);
while(e){if(e&1)ans=ans*x%MOD;x=x*x%MOD;e>>=1;}return ans;
}
ll invm(ll x){return qpower(x,MOD-2);}
const int N=3e3+10;
vc<int> to[N];ll f[N][N],s[N][N];int n,D;
void dp(int x,int fa)
{
rep(i,1,n+1) f[x][i]=1;
rep(t,0,sz(to[x])-1)
{
int y=to[x][t];if(y==fa) continue;dp(y,x);
rep(i,1,n+1) f[x][i]=f[x][i]*s[y][i]%MOD;
}
rep(i,1,n+1) s[x][i]=mm(s[x][i-1]+f[x][i]);
}
ll g[N],C[N][N];
void main()
{
C[0][0]=1;rep(i,1,n){C[i][0]=1;rep(j,1,i) C[i][j]=mm(C[i-1][j-1]+C[i-1][j]);}
n=qread(),D=qread();rep(i,2,n) to[qread()].PB(i);dp(1,0);
ll ans=0;
rep(i,1,n+1)
{
ll a=1,b=1;rep(j,1,n+1) if(i!=j) a=a*(MOD+D-j)%MOD,b=b*(MOD+i-j)%MOD;
add(ans, a*invm(b)%MOD*s[1][i]%MOD );
}
write(ans);
}//(ans+MOD)%MOD
};
int main()
{
srand(time(0));
mine::main();
}
Click to see test details