Advertisement
Guest User

tairos

a guest
Feb 22nd, 2020
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.22 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. using namespace std;
  5. ifstream fin("tairos.in");
  6. ofstream fout("tairos.out");
  7.  
  8. #define MOD 1000000007
  9. #define ll long long
  10.  
  11. vector<ll> ADJ[1005];
  12.  
  13. ll N,D,rez,nivel;
  14.  
  15. bool VIZ[1005];
  16.  
  17. ll LEVEL[1000005],LEVEL_F[1000005],dp[1000005];
  18.  
  19. void df (ll parinte,ll lev)
  20. {
  21.     nivel=max(nivel,lev);
  22.     vector<ll> :: iterator it;
  23.     bool semafor=0;
  24.     for (it=ADJ[parinte].begin();it!=ADJ[parinte].end();++it)
  25.     {
  26.         ll fiu=(*it);
  27.         if (VIZ[fiu]==0)
  28.         {
  29.             VIZ[fiu]=1;
  30.             semafor=1;
  31.             df(fiu,lev+1);
  32.         }
  33.     }
  34.     if (semafor==0)
  35.     {
  36.         ++LEVEL_F[lev];
  37.     }
  38.     else
  39.     {
  40.         ++LEVEL[lev];
  41.     }
  42. }
  43.  
  44. int main()
  45. {
  46.     int i,j;
  47.     fin >> N >> D;
  48.     int x,y;
  49.     while (fin >> x >> y)
  50.     {
  51.         ADJ[x].push_back(y);
  52.         ADJ[y].push_back(x);
  53.     }
  54.     VIZ[1]=1;
  55.     df(1,0);
  56.     dp[0]=1;
  57.     for (i=0;i<=D;++i)
  58.     {
  59.         for (j=1;j<=nivel;++j)
  60.         {
  61.             dp[i+j]+=(dp[i]*LEVEL_F[j])%MOD;
  62.         }
  63.     }
  64.     for (i=0;i<=D;++i)
  65.     {
  66.         rez+=(dp[D-i]*LEVEL[i])%MOD;
  67.     }
  68.     fout << rez%MOD;
  69.     fin.close();
  70.     fout.close();
  71.     return 0;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement