题解:CF2117F Wildflower

news/2025/11/12 20:27:43/文章来源:https://www.cnblogs.com/StarLink/p/19215306

CF2117F Wildflower

更洛谷的阅读体验

好题,爽!

思维题,爽!

Ad-hoc,爽!

我做出来了,爽飞了!

思路

首先我们发现由于每个点的权值只可能是两种情况,所以一旦出现三个及以上的叶子节点就肯定出现了相同的子树权值和,此时的答案为 0。

那么合法的树就只有两种形态,一种直接退化成链,另外一种只有一个节点有两个子节点,如下图。(有点丑见谅)

先看一条链的情况,容易发现此时怎么填都合法,假设有 \(n\) 个节点,每个节点有两种情况,答案显而易见的就是 \(2^n\)

看第二种情况,我们发现出现分叉之前的节点和链的情况是一样的,只需要考虑两个分支怎么填。

我们假设剩下的这两条链长度相同,从最下面的两个叶子考虑,肯定是一个为 1 一个为 2,往上走只要有一个填了 1 就肯定会出现重复,这是显然的,可以自己手模一下。
也就是说,最终这两条链的子树权值和从下往上的数列一定是一个全是奇数一个全是偶数,就只有两种可能,和它上面的链的答案再拼起来,我们设分叉前的链长为 \(l\),答案就是 \(2^{l + 1}\)

考虑最后一种情况,即两个分支的长度不相等,如下图:

我们先从下往上同时填数直到较短链到达两个叶子的 LCA,目前已经填好权值的节点是 \(5\)\(6\)\(7\)\(8\),此时还是两种可能。

目前看来好像是没有问题的,和上一种情况一样,然后我们考虑节点 \(4\)

设节点 \(x\) 的权值是 \(a_x\),注意到当 \(a_5 = 2\)\(a_6 = 1\)\(a_7 = 2\)\(a_8 = 2\) 时,\(a_4 \neq 1\)。因为此时 \(s_4 = s_7 = 4\),不符合题意,所以从节点 \(4\) 到节点 \(8\) 的合法的情况只有 3 种。

形式化地,设较短链长为 \(len\),这棵树的最大深度为 \(dep\_max\),答案应为 \(2^{dep\_max - len - 1} \times 3\)

我们按照上面的方法分类讨论即可。

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;const int MN = 2e5 + 3, mod = 1e9 + 7;
int n, dep[MN], ans, len;
vector<int> rec;int head[MN], tot;
int to[MN << 1], nx[MN << 1];
void add(int x, int y) {to[++tot] = y;nx[tot] = head[x];head[x] = tot;
}void dfs(int x, int fa) {dep[x] = dep[fa] + 1;int fl = 0;for (int i = head[x]; i; i = nx[i]) {int y = to[i];if (y == fa) continue;fl++;dfs(y, x);}if (fl == 0) rec.push_back(dep[x]);else if (fl > 1) len = dep[x];
}int power(int a, int b) {int res = 1;for ( ; b; b >>= 1, a = a * a % mod)if (b & 1) res = a * res % mod;return res;
}void fir();
void solve() {cin >> n;fir();for (int i = 1; i < n; i++) {int x, y;cin >> x >> y;add(x, y);add(y, x);}dfs(1, 0);if (rec.size() > 2) return cout << "0\n", void();if (rec.size() == 1) {int x = rec[0];return cout << power(2, x) << "\n", void();}int mn = mod, mx = 0;for (int x : rec) {mn = min(mn, x);mx = max(mx, x);}if (mn == mx) return cout << power(2, len + 1) << "\n", void();else {int tmp = mn - len;int tl = mx - tmp - 1;ans = power(2, tl) * 3 % mod;cout << ans << "\n";}
}inline void fir() {ans = tot = 0;len = 0;for (int i = 1; i <= n; i++) head[i] = 0;rec.clear();
}signed main() {ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);int T;cin >> T;while (T--) solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/963741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UVM环境自动生成器具(2)uvmdvgen

UVM环境自动生成器具(2)uvmdvgenpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&…

题解:CF961C Chessboard

洛谷。 题目传送门。 某次校内模拟赛的 T1。 分析 注意到 \(n\le100\),显然这是一道搜索题。考虑怎么来搜。 我们发现,四块小棋盘可以在左上、右上、左下、右下任意排列,那么构成大棋盘的总方案数就是 \(4!=24\) 种…

7年java开发的一些感悟

下面是对你原文的润色和扩写版本,保持你真实的口吻,但更有层次、情绪和故事感,也让读者更容易共鸣:很难想象,我已经在 Java 这行干了 7 年了。 今年快 35 岁,前段时间刚换了一家公司,总算不用再为生活焦虑得睡不…

11.12 NOIP模拟6/多校1 改题记录

......HZOJ 写在前面 NOIP AK me. 全是唐题。如此模拟赛,何以NOIP?大概就是所有时间拿去攻T1了吧。然后暴力也懒得打了。《Blueming》 ‘뭐해?‘라는 두 글자에 在干嘛?这几个字中 ‘네가 보고 싶어’ 나의 속마음…

文字识别系统代码

点击查看代码 import torch from torch import optim import torch.nn as nn import torch.nn.functional as F from torch.autograd import Variable from torchvision import datasets, transforms from torch.utils…

B4093 [CSP-X2021 山东] 发送快递

B4093 [CSP-X2021 山东] 发送快递 题解题目传送门 我的博客 - 欢迎光临! 本题弱化版(?):P3052,P10483 二者互为双倍经验。首先对于一个强制捆绑组里的物品,我们直接使用并查集,将一个并查集里的物品合成为一个…

从零上手 Rokid JSAR:打造专属 AR 桌面交互式 3D魔方,开启空间创建之旅

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

微软2025年11月补丁星期二修复1个零日漏洞和63个安全漏洞

微软2025年11月补丁星期二发布了安全更新,修复了63个安全漏洞,其中包括1个被积极利用的零日漏洞。本次更新包含4个严重级别漏洞,涉及权限提升、远程代码执行等多个安全领域。微软2025年11月补丁星期二修复1个零日漏…

CF468C Hack it!

已严肃完成今日构造大学习。 首先扔出来一个 \([1, 10^{18} - 1]\) 区间,你会发现这个区间每往右平移一个单位那么 \(f\) 的和就会加 \(1\),当然得在 \(2 \times 10^{18} - 1\) 之内,这也是我们选择这个界的原因。 …

深入解析:FT62FC3X 8位MCU单片机选型表,详细解析FT62FC31A/32A/33A/35A/3FA

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

FFmpeg for Android 图传Web

FFmpeg for Android & 图传Web 之前在项目研发中有个需求, 需要对接RTSP摄像头, 并且需要将其转封装格式到H5能够播放的格式, 并且需要在纯安卓APP中实现, 并且需要低延迟. 找了一圈都没有合适的且现成的方案, 这个…

语法记录

\(\texttt{titile}\) 计概与数算行末不要空格!!! 字符串与字符数组读入 cin >> str //字符与字符串,不含空格、制表符与换行 scanf("%c", &ch) //读单个字符 ch scanf(" %c", &…

Can Large Language Models Detect Rumors on Social Media?

论文信息论文标题:Can Large Language Models Detect Rumors on Social Media?论文作者:刘强、陶翔、吴俊飞、吴舒、王亮论文来源:发布时间:2024-02-06论文地址:link论文代码:link1 介绍 1.1 研究动机研究动机围…

压迫

从明天开始到考研结束前 拒绝三角洲 方舟想起来了挂一下,没想起来就算了 抖音不再打开 b站用来看课 每天总结反思 多学多想多思考 提高效率 瞄着最高分努力 看看实力 如果考的太高完全可以选择二战,这也是二战得信心…

P13573 [CCPC 2024 重庆站] Pico Park

P13573 [CCPC 2024 重庆站] Pico Park 题意: 游戏中,有 \(n\le 500\) 名玩家,依次站在数轴的 \(1,2,3, \dots, n\) 处,第 \(i\) 名玩家有一个面向的方向 \(d_i\),为向左或向右。 每名玩家手里有一把缩小枪,玩家会…

手工安装gcc-13.3.0

手工安装gcc-13.3.0wget https://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.2.1.tar.bz2wget https://gcc.gnu.org/pub/gcc/infrastructure/mpfr-4.1.0.tar.bzwget https://gcc.gnu.org/pub/gcc/infrastructure/mpc-1…

深入解析:Cookie、Session、JWT、SSO,网站与 APP 登录持久化与缓存

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

gowin ide linux安装教程

1.下载,下载地址 https://www.gowinsemi.com.cn/software/index 我下载的版本是Gowin_V1.9.11.03_Education_Linux ps:云源软件和云源编程器的区别: 云源软件包含一系列工具如ide,综合工具,编程器等等 云源编程器就…

AT_arc111_f [ARC111F] Do you like query problems?

首先这个取 \(\min,\max\) 操作很不好做。 并且对可能的操作序列计数很不好做。 参考 【题解】ARC111F Do you like query problems?。 考虑先转期望,求出每种操作序列的期望结果。 发现序列中每个位置都不受其他位置…

Win7 隐藏文件夹盘符

1、打开注册表编辑器 regedit 2、找到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer 3、 右键新建 DWORD-32 值:名称修改为:NoDrives 十进制值按下表填写4、重启系统生效!