题解:P14309 【MX-S8-T2】配对

news/2025/10/25 23:38:31/文章来源:https://www.cnblogs.com/houpingze/p/19166141

前言:考场上看出来了某关键性质结果发现做不下去了,然后就寄了。最后因为代码全部加了文件操作荣获总分 0 分的优异成绩。


这种题需要我们多加猜测性质并辅以证明。

性质 #1

我们先不考虑任何修改操作。

一个子树内的 \(1\) 的点的个数如果是偶数,那么它必然在这个子树内匹配完,如果是奇数那么它能且仅能剩下一个 \(1\) 没有匹配。这样一定最优

证明.考虑一种简单情况

如果我们选择下面两个点和上面两个点分别各自匹配,则代价就是 \((w_4+w_5)+w_1\)

如果是一个下匹配一个上,代价就是 \((w4+w3+w2)+(w5+w3+w2+w1)\)

显然前者小于后者。

性质 #2

我们发现甚至构造方案都很费劲,于是显然需要更加优秀的答案计算方式。这也是本题的核心。

令每条边把树分成两侧。

记子树内 \(k\) 为该侧的 \(1\) 的个数(以任意根化,把边看作“父-子”边,\(k\) 取子侧的 \(1\) 个数)。

若不做交换,
得到的最小总代价

\[ S_0=\sum_{\text{父-子边 }(p-v)} w_{pv}\cdot (k_v\bmod 2). \]

感性证明:

  1. 每条边仅可能不被经过或者经过一次。(由性质 #1)
  2. 某边只有在两侧奇偶不一致时才必须被若干配对经过一次,从而计入其权重。(由性质 #1)

粗略地理解,\(k_v\) 是偶数则在这个子树内部的点必然被消化完全, \(k_v\) 是奇数则这个子树内部的点必然会有且仅有一个 \(1\) 节点需要往上去匹配。

此时暴力修改,我们能获得50pts。


现在引入修改。我们首先发现很难处理,但是你不能寄了。

尝试从特殊性质去入手。

特殊性质保证了 \(1\) 节点的个数是偶数。

那如果是奇数我们该怎么做?

实际上就是任意删去一个 \(1\) 节点。或者说,把 \(1\) 节点变成 \(0\) 。这实际上是一个取反操作

再回到修改操作。我们发现,修改操作本质上也是对一个 \(0\) 节点和一个 \(1\) 节点 一起进行取反操作

然后便可以树形 DP 。设 \(f_{i,a,b}\) 表示以 \(i\)为根节点的子树中取反 \(a\)\(1\)\(b\)\(0\) 的最小代价。这样就可以爆做了。

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

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

相关文章

HuggingFace 库使用小技巧

有时在处理数据的时候,我们在数据处理函数内部添加调试语句但是却没有输出,这可能是因为:数据被缓存了,令overwrite_cache: true即可,这样就会重新调用数据处理函数处理数据(一般在调试的时候使用)

【ArcMap】复制选中的线并将其上移一段距离

首先选中需要复制的线 在python2窗口中输入以下代码:此处为上移10米对于地理坐标系,使用0.00009度(约10米)对于投影坐标系,使用10米# -*- coding: utf-8 -*- import arcpy import os import sys# 重新加载sys并设…

启动分布式mapreduce的过程以及prompt

打开docker desktop,启动5个节点 用VS Code连接到第一个节点 为每个节点打开SSH服务service ssh start 每个节点运行cd /usr/local/hadoop-3.4.0/sbin && ./stop-all.sh && rm -rf /usr/local/hadoop…

记一次thinkphp3.2项目迁移失败的原因。 is currently unable to handle this request. HTTP ERROR 500

项目迁移到别的服务器后报错如下 This page isn’t working xxxx is currently unable to handle this request. HTTP ERROR 500这个问题是关闭了错误显示,不能看到明显的错误 打开php.ini文件 display_errors = Off …

20232310 2025-2026-1 《网络与系统攻防技术》实验三实验报告

1.实验内容 1.1回答问题 (1)杀软是如何检测出恶意代码的? 将文件二进制代码与病毒库中的已知恶意特征对比,若匹配则判定为威胁。 分析代码结构和行为逻辑,例如检查是否调用危险API、是否存在异常注册表操作或加密…

题解:AT_apc001_h Generalized Insertion Sort

为数不多能瞎搓出来的构造。 题意:给出一棵以 \(0\) 为根的树和每个点上的值 \(a_i\),每次可以对一个点 \(u\) 进行以下操作:设从根往下走到 \(u\) 的路径为 \(p_1,p_2,\cdots p_k\),那么令 \(a_{p_i}\leftarrow a…

[SWPUCTF 2024 秋季新生赛]http标头 WP

[SWPUCTF 2024 秋季新生赛]http标头 WP 进入界面,会发现一个黑神话悟空,让我们在发布时间 \(0\) 时 \(0\) 分 \(0\) 秒。 我们打开 Burpsuite 抓包,拦截请求。按照他的要求,修改 Date。 Date:Tue, 20 Aug 2024 00:…

20251025 之所思 - 人生如梦

20251025 之所思1. 参加了公司安排的校招,毕业15年再次回到大学,看着一张张年轻的面庞,突然感觉到自己已经不再年轻,年轻真好,可是时光不能倒流,珍惜时间,让每一天都过得有意义。2. 第一次完成了面试,面试前还…

为什么Java/Python程序无需关心内存释放?揭秘垃圾回收(GC)的核心概念

为什么Java/Python程序无需关心内存释放?揭秘垃圾回收(GC)的核心概念在Java的编程世界里,开发者既无需也无法像C/C++那样手动调用malloc/free来管理内存的分配与回收,这一核心任务完全由Java虚拟机在幕后自动完成…

从图像到文本:详解藏文OCR的实现过程与核心技术

随着人工智能与数字化浪潮的推进,光学字符识别技术已成为连接物理世界与数字世界的关键桥梁。藏文,作为我国重要的少数民族文字之一,其识别技术的发展对于促进民族文化传承、推动区域信息化建设具有深远意义。本文将…

【打造自己的 DeepSeek】第 2 期:怎么安装自己的 DeepSeek?

上一期介绍了为什么要打造自己的 DeepSeek,本期将介绍怎么安装自己的 DeepSeek。这里要使用的工具是 Ollama。它是一个免费开源的本地大语言模型运行平台,可以帮我们把 DeepSeek 模型下载到我们自己的电脑上运行,支…

初步学习计算机相关知识有感 - fang

刚刚上大学两个月左右,学习计算机相关的知识给我的感受如下。 1. “陌生”从前没有接触过的名词或描述,这感觉像学习一门新的外语。 例如,第一次听到“数据结构”、“算法”或“面向对象编程”时,我感到十分困惑,…

一种解决所有 OI 问题的算法:Dream 算法

前言面对茫茫题海,是否感觉对于某些题目找不到合适的算法求解而苦思冥想? 面对人类智慧,是否感觉自己的智商远远跟不上? 面对无数比赛,是否因为自己总是拿不了高分而陷入苦恼? 面对无数文化课恶心题,是否总是无…

【论文阅读】ASPS: Augmented Segment Anything Model for Polyp Segmentation - 指南

【论文阅读】ASPS: Augmented Segment Anything Model for Polyp Segmentation - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; …

RuoYi-Cloud 认证实现

RuoYi-Cloud 微服务安全认证体系深度解析 1. 整体架构概览 RuoYi-Cloud 的安全认证体系由以下几个核心组件构成:网关服务(ruoyi-gateway):统一认证入口 认证服务(ruoyi-auth):处理用户登录认证 公共安全模块(r…

CobaltStrike流量分析

CobaltStrike流量分析 1.溯源反制,提交黑客CS服务器的flag.txt内容 使用nmap扫描IP开放端口,发现开放了一个 2357端口 我们看看里面有什么可以看到对方IP开放了一个2375端口,我们看看有没有什么利用的方法 一、端口…

2025年自动上料机厂家权威推荐榜:螺旋上料机/真空上料机/粉末上料机,高效输送系统精准选型指南

2025年自动上料机厂家权威推荐榜:螺旋上料机/真空上料机/粉末上料机,高效输送系统精准选型指南 在工业自动化快速发展的今天,自动上料机作为生产线的重要环节,其性能直接影响生产效率和产品质量。螺旋上料机、真空…

建立VLAN间通信

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

用代码将txt分别转换成列表和字典

txt = """男孩:boy 女孩:girl 姓名:name 年龄:age 性别:sex""" # 转换为字符串列表(每行一个元素) str_list = [line for line in txt.split(\n)] # 创建中-英字典 zh_en_dict =…