Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.57 KB | None | 0 0
  1. #pragma comment(linker,"/STACK:128000000")
  2. #include <stdio.h>
  3. #include <cstdlib>
  4. #include <cctype>
  5. #include <cstring>
  6. #include <cmath>
  7. #include <ctime>
  8. #include <cassert>
  9.  
  10. #include <deque>
  11. #include <string>
  12. #include <vector>
  13. #include <queue>
  14. #include <stack>
  15. #include <map>
  16. #include <set>
  17. #include <unordered_set>
  18. #include <unordered_map>
  19. #include <utility>
  20. #include <algorithm>
  21. #include <tuple>
  22. #include <iostream>
  23. #include <random>
  24. #include <iterator>
  25. #include <list>
  26. #include <iomanip>
  27. #include <random>
  28. #include <complex>
  29. #include <deque>
  30. #include <numeric>
  31.  
  32. using namespace std;
  33.  
  34. typedef long long ll;
  35. typedef long double ld;
  36. typedef vector<ll> vl;
  37. typedef vector<vl> vvl;
  38. typedef vector<int> vi;
  39. typedef vector<vi> vvi;
  40. typedef pair<int, int> pii;
  41. typedef pair<double, double> ptd;
  42.  
  43. const int inf = (int)1e9 + 1000;
  44. const ll infLL = 10000000000000001LL;
  45. const int mod = (int)1e9 + 7;
  46. const double eps = 1e-11;
  47. const double pi = 3.141592653589793;
  48. const int maxlen = (int)2e5 + 10;
  49. const int base = (int)1e9;
  50.  
  51. const int dd = (int)1001;
  52.  
  53. #define ACCEPTED return 0;
  54. #define mp make_pair
  55. #define all(x) (x).begin(), (x).end()
  56. #define rall(x) (x).rbegin(), (x).rend()
  57. #define optimize cin.sync_with_stdio(false);cout.sync_with_stdio(false);cin.tie(0);
  58. #define name "bridges"
  59. #define scnaf scanf
  60. #define X first
  61. #define Y second
  62.  
  63. set<int> g[dd];
  64. set<int> V;
  65. int deg[dd];
  66.  
  67. ll dfs(int m, int q)
  68. {
  69.     if (m == -1)
  70.         return 0;
  71.  
  72.     if (V.size() == 1) {
  73.         if (m > 1)
  74.             return 0;
  75.         return m ^ q;
  76.     }
  77.  
  78.     int u = find(deg + 1, deg + 1 + dd, 1) - deg;
  79.  
  80.     deg[u] = 0;
  81.     for (int to : g[u]) {
  82.         deg[to]--;
  83.         g[to].erase(u);
  84.     }
  85.  
  86.     V.erase(u);
  87.  
  88.     ll ans = 0;
  89.     if (q == 0)
  90.         ans = (dfs(m - 1, 1) + dfs(m, 0)) % mod;
  91.     else
  92.         ans = (dfs(m - 1, 1) + dfs(m, 1)) % mod;
  93.  
  94.     V.insert(u);
  95.     deg[u] = 1;
  96.     for (int to : g[u]) {
  97.         deg[to]++;
  98.         g[to].insert(u);
  99.  
  100.     }
  101.  
  102.     return ans;
  103. }
  104.  
  105. int main()
  106. {
  107. #ifdef _DEBUG
  108.     freopen("input.txt", "rt", stdin);
  109.     freopen("output.txt", "wt", stdout);
  110. #else
  111.     //    freopen(name".out", "wt", stdout);
  112. //    freopen(name".in", "rt", stdin);
  113. #endif
  114.  
  115.     int n, m;
  116.     scnaf("%d %d", &n, &m);
  117.  
  118.     for (int i = 0; i < n - 1; i++) {
  119.         int u, v;
  120.         scnaf("%d %d", &u, &v);
  121.  
  122.         g[u].insert(v);
  123.         g[v].insert(u);
  124.  
  125.         V.insert(v);
  126.         V.insert(u);
  127.         deg[u]++;
  128.         deg[v]++;
  129.     }
  130.  
  131.     ll ans = dfs(m, 0);
  132.  
  133.     printf("%lld", ans);
  134.  
  135.     return 0;
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement