Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <vector>
- using namespace std;
- ifstream fin("tairos.in");
- ofstream fout("tairos.out");
- #define MOD 1000000007
- #define ll long long
- vector<ll> ADJ[1005];
- ll N,D,rez,nivel;
- bool VIZ[1005];
- ll LEVEL[1000005],LEVEL_F[1000005],dp[1000005];
- void df (ll parinte,ll lev)
- {
- nivel=max(nivel,lev);
- vector<ll> :: iterator it;
- bool semafor=0;
- for (it=ADJ[parinte].begin();it!=ADJ[parinte].end();++it)
- {
- ll fiu=(*it);
- if (VIZ[fiu]==0)
- {
- VIZ[fiu]=1;
- semafor=1;
- df(fiu,lev+1);
- }
- }
- if (semafor==0)
- {
- ++LEVEL_F[lev];
- }
- else
- {
- ++LEVEL[lev];
- }
- }
- int main()
- {
- int i,j;
- fin >> N >> D;
- int x,y;
- while (fin >> x >> y)
- {
- ADJ[x].push_back(y);
- ADJ[y].push_back(x);
- }
- VIZ[1]=1;
- df(1,0);
- dp[0]=1;
- for (i=0;i<=D;++i)
- {
- for (j=1;j<=nivel;++j)
- {
- dp[i+j]+=(dp[i]*LEVEL_F[j])%MOD;
- }
- }
- for (i=0;i<=D;++i)
- {
- rez+=(dp[D-i]*LEVEL[i])%MOD;
- }
- fout << rez%MOD;
- fin.close();
- fout.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement