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. ASP.NET Session 清除

    // 值为 null,这样对应的 Session 会继续存在,但值为 null Session["UserId"] = null; // 移除指定 Session Session. ...

  2. ASP.NET 自定义DataTable数据

    using System.Data; //DataTable try {     DataTable dt = new DataTable();     dt.Columns.Add("Bu ...

  3. JMeter跨线程传参总结

  4. python,url请求失败重新请求的方法(try、except 应用)

    爬虫请求链接,有时候会出现请求失败或者等待时间很长的情况,用下面的方法可以一定程度的解决这个问题 url='https://cl.xxxx.xyz/'+url try: response = requ ...

  5. Windows路径或者Linux路径映射成web路径进行访问代码

    package com.soft.mpms.zframe.config; import java.io.File; import org.springframework.context.annotat ...

  6. 2025AI应用全景图谱报告

    提供AI咨询+AI项目陪跑服务,有需要回复1 加粉丝群获取报告 模型基础能力的提升加上自媒体的各种活跃,为AI应用提供了成长的温床,所以25年被称为了AI应用爆发的元年,这是有道理的,至少老板们在投钱 ...

  7. Java 线程的同步与死锁

    目录 1.线程的同步产生的原因 2.线程的同步处理操作 3.线程的死锁情况 排查死锁的方式: 请解释多个线程访问统一资源时需要考虑哪些情况?有可能带来哪些后果? 概念:Java同步和异步,阻塞和非阻塞 ...

  8. servlet @WebServlet注解

    web开发中可以通过web.xml写servlet标签表明一个类是Servlet,servlet3.0后可以使用@WebServlet表示一个类为Servlet. @WebServlet 参数 说明 ...

  9. 【经验】C++|利用 Windows API,通过文件句柄获取文件路径的两种方式

    方法一 主要参考博客:根据文件句柄获得文件名(这篇超级清晰,就是有一点点小问题) 通过文件句柄获得文件路径(这篇不是很好用,但是思路大体是一致的) 主要思路: 根据HANDLE 创建映射文件,调用Ge ...

  10. JavaScript编程的10+最佳实践解决方案

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...