APIO2025 一堆题解

图论

AtCoder Xmas Contest 2024 A

答案永远是\(1\),6

NWRRC 2015 Graph

考虑不加边,怎么找字典序最小的拓扑序,就维护一个小根堆即可

然后考虑怎么加边,可以贪心,依旧维护一个小根堆,如果当前小根堆的大小\(=1\),则必须得用了,否则若\(k\)还有剩余,那么我们就可以给这个数加一条入边,然后给这个数放到一个大根堆中,后面再考虑具体连哪里

那么每次小根堆大小\(=1\)的时候,就可以考虑从大根堆里取出点来用了,然后具体的,它的连边就是拓扑序上一位连给它的就行

复杂度\(O(NlogN)\)

APIO2022 游戏

太牛了!

首先显然可以记\(pre_x\),\(suf_x\),表示可以到达\(x\)的前缀特殊点和\(x\)可以到达的后缀特殊点

当\(pre_x\geq suf_x\)时就可以return true;

直接维护是\(O(NK)\)的

但是因为我们实际上只关心是否有\(pre_x\geq suf_x\),所以考虑把\([pre_x,suf_x]\)当作一个区间,然后放到线段树上对应的那个\(pre_x\leq mid\&\&mid<suf_x\)的节点上

考虑加入一条边\((u,v)\)时的变化:

  • 若\(u\)的区间和\(v\)的区间相离

此时如果\(u\)的区间在\(v\)的左侧,则无事发生

若在右侧,则就是一个环了

  • 若\(u\)的区间和\(v\)的区间重合

分讨一下发现无事发生

  • 若\(u\)的区间和\(v\)的区间呈包含关系

若\(v\)的区间在\(u\)的左儿子里,此时\(u\)的区间变成原本区间的左儿子,然后递归下去

若\(u\)的区间在\(v\)的右儿子里,此时\(v\)的区间变成原本区间的右儿子,然后递归下去

否则无事发生

复杂度就是\(O((N+M)logK)\)

P9257 [PA 2022] Mędrcy

因为考虑每个咒语只有两个人不会,就可以给这两个人连边

那么一个人可以看到所有不和自己相连的边

考虑一个人什么时候会离开,即它就把它能看到的图当作真正的图,然后模拟出的离开的人和实际上离开的人不一样:

  • 第一天,如果\(x\)的视角中没有边,那\(x\)会离开
  • 第二天,如果\(x\)的视角中,\(y\)和所有其它点都有连边,但\(y\)没离开,则\(x\)会离开

发现这是一个类似子问题的过程,设\(f(G)\)表示图\(G\)的最早有人离开的时刻以及对应的人,则有转移\(f(G)=\min_x f(G-\{x\})+1\)

这个本质是最小点覆盖,这个没啥快速的算法,但是这里\(k\)比较小,就可以考虑点神秘的做法

考虑一般的做法,就是会选一个点,然后看选不选它,如果不选的话它的所有相连的点都要选,这启发我们从度数最大的点开始考虑,当然这里把重边压缩了

但直接这样还是会寄,复杂度大概就是\(T(k)=T(k-1)+T(k-mx_d)+O(N)\),发现如果\(mx_d\geq 3\)的话,复杂度就会降到大概\(O(6e4N)\),而显然\(mx_d\leq 2\)的话我们能直接算

则复杂度大概就是\(O(6e4N)\)的了

CF2080A

首先分成强联通间的边和内的边

之间的边,因为显然呈\(DAG\),所以能删的边就是那些,\((s,t)\),可以通过其他边实现\(s\rightarrow t\)的边,证明就可以考虑一直找下去,总会找到底的

注意强联通缩点后可能出现重边,处理一下

现在考虑强联通块内部的边

首先如果删掉这条边后,还是强联通的,那么这条边就不会删

然后考虑删掉这条边\(i\)过后剩下的强联通分量集合\(S_i\),考虑把所有\(S\)相同的放到一起,显然不同的之间互不影响

发现对于集合为\(S\)的\(\{i\}\),\(|S|\geq |\{i\}|\),等于当且仅当就是大致一个环(当然可能不是环,但可以理解为环)

如果\(|S|=|\{i\}|\),就必须留下一个,否则可以全删

复杂度\(O(M(N+M))\)

apio

t3

做法1

做法来自小登来自鲤鱼(?

首先你手模一下,发现最优的情况就是,\(n-[n\%2]\)条边能两两匹配,且匹配起来的边相互垂直

然后考虑先把坐标系划分成\([0,90)\)和\([90,180)\),称为一象限和二象限

以\(n\)为偶数的情况为例,\(n\)为奇数类似,就是处理一下那条多出来的边

此时显然有一、二象限里的边数都是\(\frac n2\),所以如果有一侧多了,如果一象限多了,那么就把一象限中度数最大的边直接弄到度数为\(90\),如果二多了,就把二中度数最大的边弄到度数为\(0\)

这个过程显然合法

然后因为要求匹配的垂直,考虑一的所有点都是\(0\),二的都是\(90\)显然是合法的,然后考虑怎么构造出这样的局面

考虑把二的所有弄到\(0\)上,一的所有弄到\(90\)上

依旧参考上面的调整,这次每次取出二中度数最大的和一中度数最大的,挪到其中一个为\(0/90\),然后结束该次操作

这样合法性也显然

然后操作数显然是\(O(2N)\)级别的

做法2

做法来自小登分享

话说考场上想过这种来着,但是感觉太阴间了不太可能,结果还真行

首先还是得放成一堆直角,然后你发现,当你放出一个直角后,其他的边无论在哪里,和这两条边的和都是\(90°\)

还是以\(n\%2=0\)为例

考虑一个很自然地想法,把边按度数排序后,第\(i\)大的和第\(i+\frac n2\)大的要形成直角

考虑证明直接把\(i+\frac n2\)大的挪到对应的位置就合法

可以归纳证明,首先已经形成直角的可以直接扔掉不管,那么现在考虑边\(i\)和\(i+\frac n2\)间夹的边的数量和在没被夹在里面的边的数量是相同的

大分讨一下对于\(i<j\leq\frac n2\)的第\(j\)大的边和第\(j+\frac n2\)大的边,原本它们俩和\(i\)、\(i+\frac n2\)的夹角和一定是\(\leq 180°\)的,而我们把\(i\)和\(i+\frac n2\)弄成直角后,就是\(=180°\)的了,也即显然不劣

那么这样操作次数就是\(\frac N2\)的了,非常优秀

APIO2025 一堆题解的更多相关文章

  1. NOIP2013 花匠 DP 线段树优化

    网上一堆题解,我写的是N^2优化的那种,nlogn,O(n)的那种能看懂,但是让我自己在赛场写,肯定没戏了 #include <cstdio> #include <iostream& ...

  2. BZOJ 1009 HNOI2008 GT考试 KMP算法+矩阵乘法

    标题效果:给定的长度m数字字符串s.求不包括子s长度n数字串的数目 n<=10^9 看这个O(n)它与 我们不认为这 令f[i][j]长度i号码的最后的字符串j位和s前者j数字匹配方案 例如,当 ...

  3. P1141 01迷宫

    https://www.luogu.org/problemnew/show/P1141 题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样 ...

  4. ●BZOJ 4453 cys就是要拿英魂!

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4453 题解: 后缀数组,离线询问,栈看了一堆题解才看懂,太弱啦 ~ 如果对于一个区间[l,r ...

  5. 洛谷P4243/bzoj1558 [JSOI2009]等差数列(线段树维护差分+爆炸恶心的合并)

    题面 首先感谢这篇题解,是思路来源 看到等差数列,就会想到差分,又有区间加,很容易想到线段树维护差分.再注意点细节,\(A\)操作完美解决 然后就是爆炸恶心的\(B\)操作,之前看一堆题解的解释都不怎 ...

  6. bzoj 4652: [Noi2016]循环之美

    额,,网上一堆题解,,随便一找就找到笨蒟蒻扒的了. 这个比较神奇的是纯循环小数就是[(y,k)=1],题解有证明这个的,貌似就是k进制下的类似循环节,不会不会.. 然后这道题就变成了求这个东西:∑(x ...

  7. 2019 ICPC Asia Taipei-Hsinchu Regional Problem K Length of Bundle Rope (贪心,优先队列)

    题意:有\(n\)堆物品,每次可以将两堆捆成一堆,新堆长度等于两个之和,每次消耗两个堆长度之和的长度,求最小消耗使所有物品捆成一堆. 题解:贪心的话,每次选两个长度最小的来捆,这样的消耗一定是最小的, ...

  8. BZOJ 1013 | 一份写了一堆注释的高斯消元题解

    题意 给出\(n\)维直角坐标系中\(n + 1\)个点的坐标,它们都在一个\(n\)维球面上,求球心坐标. 题解 设球面上某两个点坐标为\((a_1, a_2, ... a_n)\)和\((b_1, ...

  9. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  10. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

随机推荐

  1. 05 过拟合(over-fitting)与正则化(regularization)

    1. 什么是Overfitting 我们希望神经网络模型能够找到数据集中的一般规律,从而帮助我们预测未知数据.这个过程是通过不断地迭代优化损失函数(也就是预测值和实际值的误差)而实现的.然而随着误差进 ...

  2. elk收集分析nginx日志,并绘制图形

    一.修改nginx配置 把nginx日志修改成json格式,在nginx.conf中添加如下内容,重启nginx. log_format log_json '{"@timestamp&quo ...

  3. study PostgreSQL【1-PostgreSQL对象】

    1.服务 PostgreSQL是作为一种服务安装在操作系统下.多个PostgreSQL服务可以运行于同一台问你服务器上,但是他们侦听端口不能重复,也不能共享同一个数据存储目录. 2.Database ...

  4. 抽离BlazorWebview中的.Net与Javascript的互操作库

    做这个的目的是想使用 Blazor 中的 Javascript 与 C#中的互操作,但是又不需要加载 Blazor 整个类库,另外 BlazorWebView 组件没有支持直接通过 Http 协议加载 ...

  5. .NET中的线程本地存储(TLS)与AsyncLocal(一)

    一.TLS 线程本地存储(Thread Local Storage),字面意思就是专属某个线程的存储空间.变量大体上分为全局变量和局部变量,一个进程中的所有线程共享地址空间,这个地址空间被划分为几个固 ...

  6. FastAPI依赖注入:从基础概念到应用

    title: FastAPI依赖注入:从基础概念到应用 date: 2025/04/04 16:28:51 updated: 2025/04/04 16:28:51 author: cmdragon ...

  7. ubuntu 22.04安装docker

    一.安装 更新软件包索引: sudo apt-get update 允许APT使用HTTPS: sudo apt-get install -y apt-transport-https ca-certi ...

  8. il热更新(一)

    转载请标明出处:http://www.cnblogs.com/zblade/ 最近研究了一下如何在unity中实现c#的热更新,对于整个DLL热更新的过程和方案有一个初步的了解,这儿就写下来,便于后续 ...

  9. kafka 基础入门

    kafka是什么 Kafka (Apache kafka is a distributed streaming platform) ,官方定义是一个分布式流式计算平台.在我开发的项目中,是把kafka ...

  10. ESP-IDF教程1 开发环境

    1.开发环境 对于 ESP32 系列芯片的开发环境主要有如下几种方式: ESP-IDF(Espressif IoT Development Framework) Arduino PlatformIO ...