Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma comment(linker,"/STACK:128000000")
- #include <stdio.h>
- #include <cstdlib>
- #include <cctype>
- #include <cstring>
- #include <cmath>
- #include <ctime>
- #include <cassert>
- #include <deque>
- #include <string>
- #include <vector>
- #include <queue>
- #include <stack>
- #include <map>
- #include <set>
- #include <unordered_set>
- #include <unordered_map>
- #include <utility>
- #include <algorithm>
- #include <tuple>
- #include <iostream>
- #include <random>
- #include <iterator>
- #include <list>
- #include <iomanip>
- #include <random>
- #include <complex>
- #include <deque>
- #include <numeric>
- using namespace std;
- typedef long long ll;
- typedef long double ld;
- typedef vector<ll> vl;
- typedef vector<vl> vvl;
- typedef vector<int> vi;
- typedef vector<vi> vvi;
- typedef pair<int, int> pii;
- typedef pair<double, double> ptd;
- const int inf = (int)1e9 + 1000;
- const ll infLL = 10000000000000001LL;
- const int mod = (int)1e9 + 7;
- const double eps = 1e-11;
- const double pi = 3.141592653589793;
- const int maxlen = (int)2e5 + 10;
- const int base = (int)1e9;
- const int dd = (int)1001;
- #define ACCEPTED return 0;
- #define mp make_pair
- #define all(x) (x).begin(), (x).end()
- #define rall(x) (x).rbegin(), (x).rend()
- #define optimize cin.sync_with_stdio(false);cout.sync_with_stdio(false);cin.tie(0);
- #define name "bridges"
- #define scnaf scanf
- #define X first
- #define Y second
- set<int> g[dd];
- set<int> V;
- int deg[dd];
- ll dfs(int m, int q)
- {
- if (m == -1)
- return 0;
- if (V.size() == 1) {
- if (m > 1)
- return 0;
- return m ^ q;
- }
- int u = find(deg + 1, deg + 1 + dd, 1) - deg;
- deg[u] = 0;
- for (int to : g[u]) {
- deg[to]--;
- g[to].erase(u);
- }
- V.erase(u);
- ll ans = 0;
- if (q == 0)
- ans = (dfs(m - 1, 1) + dfs(m, 0)) % mod;
- else
- ans = (dfs(m - 1, 1) + dfs(m, 1)) % mod;
- V.insert(u);
- deg[u] = 1;
- for (int to : g[u]) {
- deg[to]++;
- g[to].insert(u);
- }
- return ans;
- }
- int main()
- {
- #ifdef _DEBUG
- freopen("input.txt", "rt", stdin);
- freopen("output.txt", "wt", stdout);
- #else
- // freopen(name".out", "wt", stdout);
- // freopen(name".in", "rt", stdin);
- #endif
- int n, m;
- scnaf("%d %d", &n, &m);
- for (int i = 0; i < n - 1; i++) {
- int u, v;
- scnaf("%d %d", &u, &v);
- g[u].insert(v);
- g[v].insert(u);
- V.insert(v);
- V.insert(u);
- deg[u]++;
- deg[v]++;
- }
- ll ans = dfs(m, 0);
- printf("%lld", ans);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement