首页 > 其他分享 >【题解】XX Open Cup, GP of Moscow

【题解】XX Open Cup, GP of Moscow

时间:2023-04-27 11:13:42浏览次数:54  
标签:ac 匹配 Submission GP 后缀 题解 Moscow 最优 QOJ

// created on 23.03.26

目录

A. Alice and Bob

对于链上的情况,异色点是一定不会选择走进同色段的(长度不小于 \(2\)),因为一定不优。所以,可以倒着 DP,求助每个点的优势步数(即走多少到同色段的最后,然后接下来是黑白相间的链;链过后如果还是同色,就再 \(+1\),表示可以消耗一手,否则没法小号)。将这个 DP 放在 DAG 上,每次选择最优的决策即可。剩下的交给背包。

提交记录:Submission #90996 - QOJ.ac

B. Brackets

我们考虑如下贪心过程:先假装所有位置都是 ),每次尝试改一对 ( 并检查后缀和,如果后缀和仍然都 \(\leq 0\) 那么合法,否则非法。

我们只需要证明:如果后缀和合法,并且原序列有解,那么改成 ( 仍然有解。假设这两个位置为 \(i,j\),如果我们可以找到 \(i<i',j<j'\) 满足 \((i',j')\) 选择了 (,那么交换匹配不劣。否则因为后续必有 ),所以只有 \(i<i'<j'<j\) 的 \((i',j')\) 选择了 ( 。此时交换匹配,检查后缀。

然后你发现,此时检查后缀,和插入 \((i,j)\) 时检查后缀并无区别。仍然是合法的,因此交换仍然合法。

提交记录:Submission #91002 - QOJ.ac

C. Circles

线性规划对偶。不难发现到一个变量的取值只会是 \(0/1\)(调整可证),所以直接 DP 即可。

提交记录:Submission #91022 - QOJ.ac

D. Deja Vu

等下。

算了。

E. Easiest Sum

考虑二分 \(w\) 计算 \(\leq w\) 需要的最小限制次数,设为 \(A(w)\) 。注意到 \(A(w)\) 是 \(O(n)\) 段的函数。将 \(a\) 做前缀和,操作变为后缀减。相当于每次维护 \(L(w)\rightarrow \min(L(w),a_i+w)\),然后若 \(a_i>L(w)\) 就要操作 \(a_i-L(w)\) 次。将后缀减变成前缀加,遇见 \(a_i>L(w)\) 时,只需要令 \(L(w):=a_i\) 即可。

算好 \(A(w)\) 的转移,再统一转移 \(L(w)\rightarrow \min(L(w),a_i+w)\) 。注意到 \(L(w)\) 也是分段函数,只需要拿栈维护每一段即可。模拟的时候将 \(A(w)\) 的修改处理出来,最后排序统一处理即可。

提交记录:Submission #91024 - QOJ.ac

F. Funny Salesman

从高位开始贪心,每次递归到可能仍然存在的最大连通块即可。

提交记录:Submission #91037 - QOJ.ac

G. Graph Coloring

\({14\choose 7}\geq 3000\),所以给点标号,每次只要挑选一位是 \(0\rightarrow 1\) 即可。正确性显然。

提交记录:Submission #91039 - QOJ.ac

H. Hidden Graph

考虑一个合法图,每次删度数最小的点,删的时候与剩下部分相连都不超过 \(k\) 条边 —— 这明确指向,我们可以通过这样的方式给图染色,将图分成 \(k+1\) 个独立集。

于是,考虑增量。每次加入 \(i\) 时,将 \([1,i-1]\) 划分独立集,然后每个独立集单独询问即可。因为独立集个数至多为 \(k+1\),所以代价不超过 \(nk+n(k+1)\) 。

提交记录:Submission #91053 - QOJ.ac

I. Insects

将题意转化为求白色点字典序最小最大匹配(黑点是原来点,白点是加入点),称之为最优匹配。显而易见,前缀答案大小不可能比最优匹配大(否则替换)。

接下来给出一种通用做法:如果对于一张二分图,可以花一定代价求出任意一组最小割,那么可以以多一个 \(\log n\) 的代价求出最优匹配。

在此之前对最小割做定义:我们求出任意一组最大匹配,然后从左部,非匹配点出发。将可以到达的点全部加入队列,然后遍历。最后访问过的点称为左集,没访问过的称为右集。而两者在左部和右部的点集,将标注下角标。

设计 \(F(S_1,S_2,S_3)\) 表示 \(S_2<S_1\) 且左部为 \(S_2\cup S_1\),右部为 \(S_3\),并且 \(S_2\) 一定在最优匹配中。答案就是 \(F(L,\empty, R)\) 。此时将 \(S_1\) 分成 \(X,Y\) 两部分且 \(X<Y\),我们求出 \((S_2\cup X,S_3)\) 的最小割,记为 \((A_l,A_r),(B_l,B_r)\) 。注意到以下事实:

  • \((B_l\cup Y,B_r)\) 的最优匹配一定包含 \(B_l\):因为 \((B_l,B_r)\) 的最优匹配已经包含 \(B_l\),考虑匈牙利增广即可。
  • \((S_2\cup X,S_3)\) 的最优匹配由 \((A_l,A_r)\) 和 \((B_l,B_r)\) 的最优匹配构成:因为 \(A_l,B_r\) 之间没有边,而 \(B_l,A_r\) 之间的边一定会让最短路变小(\(B_l,A_r\) 都全在最大匹配中)。所以剩下的边都不是匹配边。
  • \((S_1\cup S_2,S_3)\) 的最优匹配由 \((A_l,A_r)\) 和 \((B_l\cup Y,B_r)\) 的最优匹配构成:考虑从 \((S_2\cup X,S_3)\) 增广,因为 \(A_r\) 已经全都在最大匹配,所以增广路不可能进入 \(A\) 。

于是,\(F(S_1,S_2,S_3)\) 由 \(F(A_l\cup S_1,A_l\cup S_2,A_r)\) 和 \(F(Y,B_l,B_r)\) 构成。容易发现一个点恰好递归到一侧,且 \(S_1\) 大小减半,因此递归树深度 \(O(\log n)\) 。

求最小割是容易解决的:从右到左贪心地找一组最大匹配。然后从每个非匹配白点出发,尝试访问剩下的点。这个可以通过对点建线段树,快速处理。

提交记录:Submission #91243 - QOJ.ac

J. Joining Points

枚举 \(1\) 的覆盖情况,剩下的部分直接 DP 就行了。

标签:ac,匹配,Submission,GP,后缀,题解,Moscow,最优,QOJ
From: https://www.cnblogs.com/qiulyqwq/p/17358366.html

相关文章

  • VueHub:我用 ChatGPT 开发的第一个项目,送给所有 Vue 爱好者
    大家好,我是DOM哥。我用ChatGPT开发了一个Vue的资源导航网站。不管你是资深Vue用户,还是刚入门想学习Vue的小白,这个网站都能帮助到你。网站地址:https://dombro.site/vue#/vue纯净模式:https://dombro.site/spa/#/vue项目托管在GitHub,访问不了的可以私信我哟,包教包会V......
  • ChatGPT的提示的一些高级知识
    作为一个大型语言模型(LLM)接口,ChatGPT有令人印象深刻的潜力,但是真正能否用好取决与我们的提示(Prompt),一个好的提示可以让ChatGPT晋升到一个更好的层次。在这篇文章中,我们将介绍关于提示的一些高级知识。无论是将ChatGPT用于客户服务、内容创建,还是仅仅为了好玩,本文都将为你提供......
  • springboot入门时,发现Java版本与Spring boot版本无法对应导致错误的问题解决
    <?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/......
  • 推荐两个AI神器:ChatGPT只需1个标题,2分钟全自动生成PPT!
    今天给大家分享两个工具,帮助你全自动生成PPT,接下来以自动化测试为主题,教大家如何2分钟生成好PPT。1、第一个工具:ChatGPT1、打开ChatGPT页面,输入prompt,告诉它,让它帮你生成一份自动化测试为主题的PPT,如:帮我生成一个自动化测试为主题的PPT,内容不少于10页,用markdown格式生成2、......
  • Hackpack 2023 逆向Re部分题解
    Hackpack2023-2023/4/15https://ctf2023.hackpack.club/challenges做了2题出来,其实是一题,第一题是手动逆向,第二题是脚本自动逆向主要是学习到了nclib包使用使用说明https://nclib.readthedocs.io/en/latest/netcat.htmlSpeed-Rev题目是在3分钟逆向6题第一题是直接找字符......
  • leetcode-350-两个数组的交集 II 题解
    题目给定两个数组,编写一个函数来计算它们的交集。示例1:输入:nums1=[1,2,2,1],nums2=[2,2]输出:[2,2]示例2:输入:nums1=[4,9,5],nums2=[9,4,9,8,4]输出:[4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。我们可以不考虑输出结果......
  • ChatGPT自动生成发布原创文章seo营销系统开发
    ChatGPT自动生成发布原创文章seo营销系统开发注:此系统性质为,依据你设置关键词类(你要推广的行业关键词,如我们的关键词可为“小程序开发”),然后系统自动生成发布海量原创文章,以达到搜索引擎收录seo目的;用户搜索关键词显示了你的网站,看到了你的广告(网站后台自行设置);达到引流转化的目的......
  • 明解STM32—GPIO应用设计篇之API函数及配置使用技巧
    一、前言        本篇开始对STM32的GPIO在实际开发设计中的使用配置和技巧进行探讨,可以先去回顾下之前介绍的GPIO的相关理论基础知识包括基本结构,工作模式和寄存器原理。        了解过STM32的GPIO相关的理论知识,这样在应用GPIO开发过程中,能更好的理解GPIO的特......
  • 2022CCPC威海站 铜牌题解 A C D E G I J 补题
    A//木桶效应#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=2e5+10;map<string,int>cham;pair<string,int>player[N];intcnt1[6];intcnt2[6];intn,m;intsum;signedmain(){cin>>n;f......
  • 明解STM32—GPIO应用设计篇之API函数及配置使用技巧
     一、前言本篇开始对STM32的GPIO在实际开发设计中的使用配置和技巧进行探讨,可以先去回顾下之前介绍的GPIO的相关理论基础知识包括基本结构,工作模式和寄存器原理。了解过STM32的GPIO相关的理论知识,这样在应用GPIO开发过程中,能更好的理解GPIO的特点,应用起来会更加的得心应手。后续将......