Salvens

B

Jul 31st, 2023 (edited)
994
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.03 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <array>
  4. #include <set>
  5.  
  6. using namespace std;
  7.  
  8. #define int long long
  9.  
  10. const long long INF = 1e18 + 7;
  11. const int MAXN = 1e5 + 100;
  12. const int N = 1e5 + 10;
  13. const int MOD = 1e9 + 7;
  14.  
  15. array<array<int, MAXN>, 2> dp;
  16. array<int, MAXN> used;
  17. vector<vector<int>> g;
  18.  
  19. void dfs(int v, int p) {
  20.     used[v] = true;
  21.     int w = 1, b = 1;
  22.     for (auto to: g[v]) {
  23.         if (!used[to]) {
  24.             dfs(to, v);
  25.         }
  26.         if (to != p) {
  27.             w = ((dp[0][to] + dp[1][to]) % MOD * w) % MOD ;
  28.             b = (b * dp[0][to]) % MOD;
  29.         }
  30.     }
  31.     dp[0][v] = w;
  32.     dp[1][v] = b;
  33. }
  34.  
  35. signed main() {
  36.     ios_base::sync_with_stdio(false);
  37.     cin.tie(nullptr);
  38.     cout.tie(nullptr);
  39.     int n;
  40.     cin >> n;
  41.     g.resize(n);
  42.     for (int i = 0; i < n - 1; ++i) {
  43.         int u, v;
  44.         cin >> u >> v;
  45.         --u, --v;
  46.         g[u].emplace_back(v);
  47.         g[v].emplace_back(u);
  48.     }
  49.     dfs(0, -1);
  50.     cout << (dp[0][0] + dp[1][0]) % MOD;
  51.  
  52. }
Advertisement
Add Comment
Please, Sign In to add comment