Advertisement
tien_noob

The Queue - LightOJ

Sep 2nd, 2021
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.82 KB | None | 0 0
  1. //Make CSP great again
  2. #include <bits/stdc++.h>
  3. #define TASK "TESTCODE"
  4. using namespace std;
  5. const int mod = 1e9 + 7, N = 1e3;
  6. int C[N + 1][N + 1];
  7. vector<int> Adj[N + 1];
  8. int n, deg[N + 1], cnt[N + 1];
  9. long long dp[N + 1];
  10. void prepare()
  11. {
  12.     C[0][0] = 1;
  13.     for (int i = 1; i <= N; ++ i)
  14.     {
  15.         for (int j = 0; j <= i; ++ j)
  16.         {
  17.             if (j == 0 || j == i)
  18.             {
  19.                 C[i][j] = 1;
  20.             }
  21.             else
  22.             {
  23.                 C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % mod;
  24.             }
  25.         }
  26.     }
  27. }
  28. void read()
  29. {
  30.     cin >> n;
  31.     for (int i = 1; i < n; ++ i)
  32.     {
  33.         int u, v;
  34.         cin >> u >> v;
  35.         Adj[u].push_back(v);
  36.         ++deg[v];
  37.     }
  38. }
  39. void DFS(int u)
  40. {
  41.     cnt[u] = 0;
  42.     dp[u] = 1;
  43.     vector<int> Child;
  44.     for (int v : Adj[u])
  45.     {
  46.         DFS(v);
  47.         cnt[u] += cnt[v];
  48.         dp[u] *= dp[v];
  49.         dp[u] %= mod;
  50.         Child.push_back(cnt[v]);
  51.     }
  52.     int check = cnt[u];
  53.     for (int c : Child)
  54.     {
  55.         dp[u] *= C[check][c];
  56.         check -= c;
  57.         dp[u] %= mod;
  58.     }
  59.     ++cnt[u];
  60. }
  61. void solve()
  62. {
  63.     for (int i = 1; i <= n; ++ i)
  64.     {
  65.         if (deg[i] == 0)
  66.         {
  67.             DFS(i);
  68.             cout << dp[i] << '\n';
  69.         }
  70.     }
  71.     for (int i = 1; i <= n; ++ i)
  72.     {
  73.         Adj[i].clear();
  74.         deg[i] = 0;
  75.     }
  76. }
  77. int main()
  78. {
  79.    ios_base::sync_with_stdio(false);
  80.    cin.tie(nullptr);
  81.    if (fopen(TASK".INP", "r"))
  82.    {
  83.       freopen(TASK".INP", "r", stdin);
  84.       //freopen(TASK".OUT", "w", stdout);
  85.    }
  86.    prepare();
  87.    int t = 1;
  88.    bool typetest = true;
  89.    if (typetest)
  90.    {
  91.       cin >> t;
  92.    }
  93.    for (int __ = 1; __ <= t; ++ __)
  94.    {
  95.       cout << "Case " << __ << ": ";
  96.       read();
  97.       solve();
  98.    }
  99. }
  100.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement