ACM
文章平均质量分 59
自己ACM训练赛的题解
YoitsuHolo
这个作者很懒,什么都没留下…
展开
-
ACM图论专题-最优比率生成树
ACM图论专题-最优比率生成树题目大意解法题目大意给你很多点,两点之间包含收益值和成本值,你要找到一颗生成树,使得其各边的收益值和成本值得比值最大解法这是一道典型的0/1分数规划问题我们有∑i=1nval[i]∑i=1ncost[i]≥k\frac{\sum^n_{i=1}val[i]}{\sum^n_{i=1}cost[i]}\geq k ∑i=1ncost[i]∑i=1nval[i]≥k那么上述式子化简后其实可以是∑i=1nval[i]−k∗cost[i]≥0\sum^n_{原创 2021-07-22 08:51:34 · 349 阅读 · 0 评论 -
AtCoder - abc207_e
AtCoder - abc207_e题目大意基本思路优化思路题目大意给你一个数组A,你可以将这个数组分为很多小块,但是要满足每一个小块的每个元素的值的和要能被这个块的编号整除,最终你需要输出满足这样性质的划分有多少种。答案对1e9+7取模基本思路我们可以记录一个 dp[i][j] 数组,表示我们当前划分的是第 i 个块,其结束位置是 j ,那么很容易有一个暴力的转移方程dp[i][j]=∑k=1j−1dp[i−1][k],((sum[j]−sum[k])mod i==0)dp[i][j]=\s原创 2021-07-20 09:34:34 · 347 阅读 · 0 评论 -
ACM图论专题-Picnic Planning
Picnic Planning题目大意解法题目大意给出一个图的边的关系,其用节点名字和距离描述边为双向边求出该图的一个最小生成树,并且满足1号节点的度数不大于给定的值解法首先要去除掉1号节点后用kruskal算法求得其余节点的最小生成森林注意,若此时森林数量大于了给定的1号节点最大度数,那么肯定没有解然后再将1号节点加入,再次使用kruskal算法,得到1号节点度数最小的一棵生成树(注意,不一定是最小的)考虑其余从1号点出发的边,其是否能够将优化路径权值,如果有多个可优化的值,我们应该选择原创 2021-07-15 15:27:47 · 205 阅读 · 0 评论 -
ACM图论专题-AtCoder-abc209_e-Problem E
AtCoder-abc209_e-Problem E题目大意解法题目大意两个人可以在一堆字符串中选择一个作为开头然后两人开始博弈,过程为:当前选择的字符的前三位字符一定要是上一次选择的一样,而且不能改变顺序,谁最先不能走就比赛失败两人的方案都以能活下去而不是以赢对手解法由于直接建图的话可能存在 n2n^2n2 条边,这是空间和事件不能接受的,故考虑将原有字符串拆点其实际就是前三个字符和后三个字符在影响边的情况,所以我们将一个字符串拆开成为两个点,一个是其前三个字符代表的点,另一个是后三个字符原创 2021-07-15 09:22:24 · 478 阅读 · 3 评论 -
ACM图论专题-走廊泼水节
走廊泼水节题目大意解法题目大意给定n个节点的一颗树,你需要将其补全为一个完全图,但是所补得完全图应该满足其最小生成树任然是给定的树,问补全这棵树所需要的边权值之和解法利用kruskal算法求解最小生成树的思想在此过程中,需要记录下每次合并的两个集合的元素的数量然后再合并的时候累计(cnt[x] * cnt[y]-1) * (val[x][y]+1)即可得到最终的答案题目要求唯一最小生成树还是原来的树简要证明如下:两个完全图,一个为x,一个为y其大小分别是cnt[x]和cnt[y],这两个原创 2021-07-14 09:53:43 · 111 阅读 · 0 评论 -
ACM图论专题-Cow Relays
Cow Relays题目大意解法题目大意给定n个点,m条无向边,给定起点和终点,问经过k条路径能从起点走向终点的最短路程解法题目点数较少,但是范围较大,可以先用离散化将点从新映射到较小范围,然后使用Floyd算法为核心思想解决问题具体操作证明ans[i][j][x]=min(ans[i][k][x-y]+ans[k][j][y],ans[i][j][k])i,j表示路程的起点和终点,x表示中间经过了几条边上式显然满足交换律,故可以使用类似矩阵快速幂的方法实现代码如下:#include &原创 2021-07-14 09:09:43 · 184 阅读 · 0 评论 -
ACM图论专题-Sorting It All Out
Sortint It All Out题目大意解法题目大意给出n个变量,m个不等关系。不等式之间具有传递性,通过传递性来判断这m个不等关系是不是可以确定两两变量之间的唯一大小关系解法利用Floyd算法来传递关系,利用二分法来确定最少需要不等式数量如果所有不等关系可以直接确定,且没有矛盾,那么需要找到能唯一确定关系的最少不等式数量如果所有不等关系不能确定,且没有矛盾,直接输出“Sorted sequence cannot be determined.”其他情况则需要输出最少能确定矛盾或者推倒出不原创 2021-07-13 21:18:23 · 195 阅读 · 0 评论 -
ACM图论专题-Roads and Planes(最优贸易)
Roads and Planes题目大意解法题目大意给定n个点的图有两种类型的边,一种是双向边,保证非负一种是单向边,可能存在负值,但保证负边不成环问从规定s节点出发后,到达每个点的最短距离解法因为保证了单向边不成环,说以我们可以先处理双向边,并将其缩为一个点然后再在有点向边的基础上,对于全部的单向边和缩的点跑拓扑排序,对于每个缩的点跑dijkstra具体过程如下:1.只把双向边加入图中,用dfs处理出图的连通块,计color[x]为节点x所在的连通块编号2.读取双向边信息,统计每个连原创 2021-07-13 17:29:50 · 206 阅读 · 1 评论 -
ACM图论专题-最优贸易
最优贸易题目大意解法题目大意n个城市,m条路径(某些为单向边某些为双向边)每个城市都可以买或卖水晶球(但是整个只能买或卖一次),问最后能赚取的最大差价是多少解法基于spfa算法每个城市的价格为price,当前最优的买入价格是buy,最优的卖出价格是sale那么我们就可以知道buy[v]=min(price[v],buy[u]),最优的卖出价格是sale[v]=max(price[v],sale[u]),然后注意要建两个图,一个正向图,一个反向图,正向图跑的是排入价格,反向图跑的是卖出价格代码原创 2021-07-12 18:35:07 · 229 阅读 · 0 评论 -
ACM图论专题-Telephone Lines
Telephone Lines题目大意解法题目大意给定有n个点,m条边的无向图你要从1号点走到n号点,在此过程中,你可以忽略k次路程的距离(可以比k小)问剩下路程中最长路段的最小值是多少解法最大值最小,显然可以用二分套最短路解决,但是这里我们基于dp思想,用一个dp数组记录在某个节点 i 忽略 j 次后所得到的最小的最大值代码如下:#include <bits/stdc++.h>using namespace std;const int M = 200010;const i原创 2021-07-11 21:04:39 · 179 阅读 · 0 评论 -
小学生都能看懂的KMP算法原理及实现(简单版)
小学生都能看懂的KMP算法原理及实现(简单版)说明什么是KMP算法从暴力思考KMP算法算法原理Next数组的构建Next数组的代码实现用Next数组匹配例题([Luogu P3375](https://www.luogu.com.cn/problem/P3375))说明在此版本中,我们仅对KMP算法的Next数组和简单的匹配做讲解对于NextVal数组不做讨论什么是KMP算法KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克原创 2021-02-09 20:36:14 · 547 阅读 · 0 评论 -
Educational Codeforces Round 103 题解报告A-D
Educational Codeforces Round 103 题解报告A-DA. K-divisible Sum题目大意:B. Inflation题目大意:C. Longest Simple Cycle题目大意:思路分析:D. Journey题目大意:思路分析:A. K-divisible Sum题目大意:给定 n 个数和一个参数 k ,并构造一个数列 a1an~ 的和能够被给定参数 k 整除,问这样满足条件的数列中的最大值最小是多少我们考虑一下两种情况:给定的 n≤kn \le kn≤原创 2021-01-30 04:06:21 · 715 阅读 · 2 评论 -
小学生都能看懂的并查集
并查集)普通并查集权值并查集1(Find them, Catch them为例)权值并查集2(食物链)普通并查集以洛谷 P3367 【模板】并查集 为例题目描述如题,现在有一个并查集,你需要完成合并和查询操作。我们可以想到这样,对于每一次的合并操作,我们得到的结果可以用一棵树来表示,那么整个并查集的过程实际上是对森林进行操作,而我们判断两个元素是否在一个集合中,只需要判断其对应的森林的根节点是否相等就可以了于是我们有了最初的想法:fa[i]=i;for_each_merge : fa[x原创 2021-01-06 11:23:43 · 290 阅读 · 2 评论 -
算法引入——归并排序
分治算法详解啥是分治为什么要用分治经典应用——归并排序啥是分治分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。这个小规模子问题很好理解,这里我们用一道小学数学题来引入现在有一堆硬币,其中有一枚假币,且已知这一枚假币的质量比真币轻,请问需要多少次称重才能找到这枚假币传统的朴素算法:在未选择序列中选择两枚称重 如果发现质量相等 将这两枚从未选择序列原创 2020-11-29 23:50:33 · 115 阅读 · 0 评论 -
POJ -3714 Raid
在应用中,常用诸如点、圆等简单的几何对象代表现实世界中的实体。在涉及这些几何对象的问题中,常需要了解其邻域中其他几何对象的信息。例如,在空中交通控制问题中,若将飞机作为空间中移动的一个点来看待,则具有最大碰撞危险的2架飞机,就是这个空间中最接近的一对点。这类问题是计算几何学中研究的基本问题之一。下面我们着重考虑平面上的最接近点对问题。最接近点对问题的提法是:给定平面上n个点,找其中的一对点,使得在n个点的所有点对中,该点对的距离最小。严格地说,最接近点对可能多于1对。为了简单起见,这里只限于找其中的一对原创 2020-11-29 11:26:41 · 338 阅读 · 0 评论