CF1777D Score of a Tree 题解
题目简述
给你一个
在每一个
定义
定义
求所有
思路
引理
引理:设
归纳证明:
在
假设在
则在
1.如果结点
2.如果结点
所以一共有
证毕
由于
由于
根据引理,每个结点对答案的贡献即为
所以用 DFS 来求
代码
#include<bits/stdc++.h>
#include<cstdio>
using namespace std;
const int N = 2E5 + 5, M = 1E9 + 7;
int n, t;
int u, v;
long long tmp = 0;
vector<int> G[N];
long long dfs(int u, int f) {
long long ans = 1;
for (int v : G[u]) {
if (v == f) continue;
ans = max(ans, dfs(v, u) + 1);
}
tmp += ans;
tmp %= M;
return ans;
}
int main()
{
cin >> t;
while (t--) {
cin >> n;
for (int i = 1; i <= n; i++) G[i].clear();
for (int i = 1; i < n; i++) {
cin >> u >> v;
G[u].push_back(v);
G[v].push_back(u);
}
long long ans = 1;
for (int i = 1; i < n; i++) {
ans *= 2;
ans %= M;
}
tmp = 0;
dfs(1, 0);
ans = ans * tmp;
ans %= M;
cout << ans << ' ';
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】