#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7, N = 1e5 + 5;
int mul(int a, int b) {
return (a * b) % mod;
}
int dif(int a, int b) {
if (a < b)
return a - b + mod;
return a - b;
}
int dp[N], cnt[N], c[N], ans[N];
vector<int> vec[N];
void dfs(int nod, int rad) {
dp[nod] = 0;
for (auto i : vec[nod]) {
if (i == rad)
continue;
dfs(i, nod);
if (dp[i] == 0) {
cnt[nod] ++;
dp[nod] = 1;
}
}
ans[nod] = dp[nod];
}
void reroot(int nod, int rad) {
for (auto i : vec[nod]) {
if (i == rad)
continue;
int curr = ans[nod];
if (cnt[nod] == 1 && ans[i] == 0)
curr = 0;
if (curr == 0)
cnt[i] ++;
if (cnt[i])
ans[i] = 1;
reroot(i, nod);
}
}
void decon(int nod, int rad) {
if (dp[nod] == 0)
c[nod] = 1;
if (dp[nod] == 0) {
for (auto i : vec[nod]) {
if (i == rad) continue;
decon(i, nod);
if (dp[i] == 1)
c[nod] += c[i];
}
}
else {
int ccnt = 0;
for (auto i : vec[nod]) {
if (i == rad)
continue;
decon(i, nod);
if (dp[i] == 0)
ccnt ++;
}
if (ccnt == 1) {
for (auto i : vec[nod]) {
if (i == rad)
continue;
if (dp[i] == 0)
c[nod] += c[i];
}
}
}
}
signed main() {
int n, d, sum = 0;
cin >> n >> d;
for (int i = 1; i < n; i ++) {
int u, v;
cin >> u >> v;
vec[u].push_back(v);
vec[v].push_back(u);
}
dfs(1, 0);
reroot(1, 0);
decon(1, 0);
for (int i = 1; i <= n; i ++)
if (ans[i] == 0)
sum ++;
int res;
if (ans[1] == 0)
res = mul(sum, c[1]);
else {
res = mul(n, n);
res = dif(res, mul(sum, c[1]));
}
cout << res << '\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |