[CF2053E] Resourceful Caterpillar Sequence 题解

news/2025/1/6 20:16:44/文章来源:https://www.cnblogs.com/wfc284/p/18652338

显然两步之内决胜负。否则两个人会来回拉扯,平局。
考虑何时 Aron 会赢。
称与叶子结点边距离小于等于 \(1\) 的结点为【制胜点】。

  • 开局 \(q\) 在叶子,\(p\) 不在叶子,直接赢。方案数 \(c(n-c)\),其中 \(c\) 为叶子数量。
  • \(q\) 在一个连着【制胜点】的点,\(p\) 不在【制胜点】。Nora 被迫把 \(q\) 移到【制胜点】,随后 Aron 赢。

针对第二种情况,我们考虑树形 DP。对于可能的 \(q\)

  • \(p\) 在子树内:我们枚举 \(q\) 的儿子 \(v\),如果其为【制胜点】,则答案加上 \(v\) 子树内的非【制胜点】个数(安放 \(p\))。
  • \(p\) 在子树外:此时 \(q\) 的父亲必须为【制胜点】。答案加上 \(q\) 子树外的非【制胜点】个数即可。

做完了,时间复杂度 \(O(n)\)

#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define Linf 0x3f3f3f3f3f3f3f3f
#define pii pair<int, int> 
#define all(v) v.begin(), v.end()
using namespace std;//#define filename "xxx" 
#define FileOperations() freopen(filename".in", "r", stdin), freopen(filename".out", "w", stdout)namespace Traveller {const int N = 2e5+2;int n;vector<int> g[N];int leaf[N], sp[N], par[N];int sum[N], sz[N];void DFS(int u, int fa) {par[u] = fa;sum[u] = sp[u];sz[u] = 1;for(auto v : g[u]) {if(v == fa) continue;DFS(v, u);sum[u] += sum[v];sz[u] += sz[v];}}bool check(int u) {if(leaf[u]) return false;for(auto v : g[u])if(!sp[v]) return false;return true;}void main() {cin >> n;for(int i = 1; i <= n; ++i) vector<int>().swap(g[i]);for(int i = 1, u, v; i < n; ++i) {scanf("%d%d", &u, &v);g[u].push_back(v), g[v].push_back(u);}if(n == 2) {puts("0");return;}int cnt = 0;for(int i = 1; i <= n; ++i)if((int)g[i].size() == 1) ++cnt;long long ans = 1ll * cnt * (n - cnt);int root = 1;for(int i = 1; i <= n; ++i)if((int)g[i].size() > 1) {root = i;break;}memset(sum, 0, sizeof(int) * (n+1));memset(sz, 0, sizeof(int) * (n+1));memset(leaf, 0, sizeof(int) * (n+1));memset(sp, 0, sizeof(int) * (n+1));for(int i = 1; i <= n; ++i) if((int)g[i].size() == 1) {leaf[i] = sp[i] = 1;for(auto v : g[i]) sp[v] = 1;}DFS(root, 0);for(int i = 1; i <= n; ++i) {if(leaf[i]) continue;if(i != root && sp[par[i]] && !leaf[par[i]]) ans += (n - sz[i]) - (sum[root] - sum[i]);for(auto v : g[i]) {if(v == par[i]) continue;if(sp[v] && !leaf[v]) ans += sz[v] - sum[v];}}printf("%lld\n", ans);}
}signed main() {#ifdef filenameFileOperations();#endifint _;cin >> _;while(_--) Traveller::main();return 0;
}
 

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

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

相关文章

记录一次线上服务OOM排查

外面,阳光明媚,一切正好。 就在我欢天喜地准备迎来愉快的双休时,忽然之间,天塌了。 刚上线一小时的服务内存异常OOM了!外面,阳光明媚,一切正好。 就在我欢天喜地准备迎来愉快的双休时,忽然之间,天塌了。 刚上线一小时的服务内存异常OOM了!老实说,在我印象里OOM问题只…

如何更换 EMLOG 默认的浏览器图标(Favicon)

更换 EMLOG 站点的默认浏览器图标(Favicon)是一个简单的过程。以下是详细的步骤,确保你能顺利更换并使新图标生效: 1. 准备新的 Favicon 文件制作 Favicon 文件:使用在线工具或图形设计软件创建一个 favicon.ico 文件。推荐的在线工具包括: 这些工具可以帮助你生成不同尺…

解决网站出现 502 Bad Gateway 错误

502 Bad Gateway 错误通常是由于后端服务器(如 PHP-FPM)无法正确处理请求导致的。以下是详细的排查和解决步骤: 1. 检查 PHP-FPM 服务状态检查 PHP-FPM 服务是否正在运行:使用命令行检查 PHP-FPM 服务状态:bashsudo systemctl status php7.x-fpm # 替换为你的PHP版本,例…

如何在 EMLOG 中添加流量统计代码

在 EMLOG 中添加流量统计代码(如 Google Analytics、百度统计等)可以通过安装 工具箱 插件来实现。以下是详细的步骤: 1. 安装并启用 工具箱 插件登录 EMLOG 后台:打开 EMLOG 后台管理界面。进入插件管理:在左侧菜单中点击“插件”。安装工具箱插件:点击“应用商店”选项…

禁止ubuntu22.04开机自动升级提示

但每次开机都这样提示 禁止的方法打开终端(Ctrl+Alt+T)。editsudo vim /etc/apt/apt.conf.d/20auto-upgrades APT::Periodic::Update-Package-Lists "0"; APT::Periodic::Unattended-Upgrade "0";运行以下命令以停止和禁用自动升级服务:sudo systemctl…

two load balancer methods

microservice without load balancer不带负载均衡例子。 https://github.com/GavriloviciEduard/fastapi-microservices/tree/master multiple upstream for load balancer 将上游服务看成独立的server traefik multiple upstream https://github.com/tanishqmanuja/demo.trae…

GDPR——管辖权和域外效力

判定企业是否需要遵循GDPR的要求,第一步需要判断是否属于GDPR的管辖范围。粗略讲分为两类: 1、营业地在欧盟(域内):注册地、在欧盟区域设有办事处等分支机构 2、营业地不在欧盟(域外):但针对欧盟公民处理数据(提供服务、监控等) 进一步的判定如下:“营业活动”:指通…

NOI Linux 2.0 竞赛环境食用指北

NOI Linux 2.0 竞赛环境食用指北 终端 使用 Ctrl+Alt+T 在当前登录用户的目录 ~ 中打开终端,也可以在文件夹中 右键 或 Shift+右键 在当前文件夹打开终端。 运行可执行文件需要加 ./,例如 ./<filename>。注意 Linux 中可执行文件是没有后缀名的。 mkdir 新建目录,ls 列…

学期2024-2025-1 学号20241424 《计算机基础与程序设计》第15周学习总结

学期2024-2025-1 学号20241424 《计算机基础与程序设计》第15周学习总结 作业信息 |这个作业属于2024-2025-1-计算机基础与程序设计)| |-- |-- | |这个作业要求在2024-2025-1计算机基础与程序设计第15周作业| |这个作业的目标|<作业总结>| |作业正文|https://www.cnblog…

中考英语优秀范文-008 when you in China, do as the Chinese do! 当你在中国时,入乡随俗!

1 写作要求 在不同的地方有不同的风俗习惯,饮食文化很重要。中国的饮食文化不同于西方。 请你谈谈中国的三餐,以“when you in China, do as the Chinese do!” 为题写一篇短文。 要求: 80词左右,内容合理; 要点齐全; 句子及篇章结构准确、连贯;书写规范。 2 优秀范文 W…

MongoDB集群中数据分布与分片

MongoDB集群中数据分布 Chunk是什么 在一个shard server内部,MongoDB还是会把数据分为chunks,每个chunk代表这个shard server内部一部分数据。chunk的产生,会有以下两个用途:Splitting:当一个chunk的大小超过配置中的chunk size时,MongoDB的后台进程会把这个chunk切分成更…

RoomFormer、FRI-Net

WSL CUDA安装 【一文解决】已安装CUDA与Pytorch但torch.cuda.is_available()为False_torch.cuda.is available返回false-CSDN博客 cuda安装 Ubuntu 20.04安装CUDA & CUDNN 手把手带你撸_ubuntu20.04安装cuda-CSDN博客 【CUDA】Ubuntu系统如何安装CUDA保姆级教程(2022年最新…