随笔分类 - 题目来源——暑假集训
摘要:标准的二分答案。 首先考虑暴力做法,即枚举最终答案ans,对于第一个可行的ans一定是最优解(在ans时间内可以烘干在ans+t(t>=0)的时间内也就一定可以烘干)由于N<=500000的数据范围绝对会TLE,因此需要优化。 接下来考虑优化,由于之前提到的性质,设f(i)表示在i时间内有无可能烘干
阅读全文
摘要:三分模板。 三分法求单峰函数最优值,之后每次取所有二次函数最优值即可 1 #pragma GCC optimize(3,"Ofast","inline") 2 #include<iostream> 3 #include<cstdio> 4 #define N 100005 5 #define eps
阅读全文
摘要:抹茶学长给的标程可以被卡到O(N2M2)??? 考虑二分答案+暴力check+离散化+卡常数 首先进行离散化,其实判重的话会更快,但是由于矩阵元素大小太大了,hash判重MLE,所以我就直接记录了NM个元素之后排序,即可二分离散化后数组中的下标。 二分离散化数组的下标,对于每一个下标考虑暴力chec
阅读全文
摘要:ZYC同志开农场了????? 二分答案。 对于每一个二分出来的答案对其进行检查(check),检查是否有一个长度大于m的字段和的平均值大于mid。方法如下:先把原数组的每一个元素减去mid,储存进一个新的数组中,我们只需要看这个数组中有没有一段子串和大于0即可(因为都减去了mid,如果大于零加回来后
阅读全文
摘要:同样是搜索经典题。 优化并不多,只需在当前步数已经大于目前答案时剪枝就可以了。 此题重点在于如何判断第k个矩形能不能选。 设矩形i的左上坐标为i(squ[i].upx,squ[i].upy),右下角坐标为i(squ[i].dox,squ[i].doy)。则判断k号矩形可以涂的条件为: if(!vis
阅读全文
摘要:标准的广搜。 采用队列保存形态,如果不会广搜的可以多看看PJ知识点。由于输入多组数据,每次标记数组要清空,每次队列元素也都要清空。 参考代码如下: 1 #include<iostream> 2 #include<cstring> 3 #include<queue> 4 using namespace
阅读全文
摘要:经典搜索题。 考虑以下9种优化 1)按木棍长度排序,使得较大长度的木棍被较早的选出。 2)只找能够整除的木棍长度,因为不能被sum整除一定不会出整数根,自然也就不是最优解。 3)枚举木棍长度时只需从最大的木棍长度(拼出的木棍长度不会小于最大的长度也不会大于总长度)枚举至总和的二分之一。如果还没有出解
阅读全文
摘要:个人认为这周题中较难的一道。 题意大概为:给定一张N个点M条边的无向图,求出无向图的一棵最小生成树,满足一号节点的度数不超过给定的整数K。保证 N <= 20 首先用map存取节点,之后抛去1号节点,求每一个联通分量的MST,就得到了一个局部最优解,设p为联通块的个数,接下来从每一个联通分量中找一个
阅读全文
摘要:给定一棵n个点的图上的最小生成树,让你把它补成完全图,使得新图的MST还是给定的MST且边权和最小,输出需要增加的边权和。 设size[i]表示以i号为祖先的并查集的大小。 首先按边权排序,之后在做MST的过程中,答案cnt+=(size[v]*size[u]-1)*(w+1),来解释一下这个式子,
阅读全文
摘要:标算是贪心,我写了个差分约束????? 设dist[i]表示1-i号土地种的树的总棵数,考虑以下几种约束条件: 1)dist[y]>=dist[x]+z,即x号土地至y号土地间至少种了z棵树 2)dist[i-1]>=dist[i]-1,即i号土地最多比i-1号土地多种1棵树 3)dist[i]>=
阅读全文
摘要:新建一个虚拟节点后直接跑最小生成树即可,从虚拟节点往每个节点连的边权为每个点建发电站的代价,许多人的考场贪心策略是:先构建原图的最小生成树后找一个花费最小的地方建发电厂。但是这样做不对的地方在于:如果每个地方的点权很小但是一些边的边权十分大,就不如多建几个发电厂核算,因此新建虚拟节点就是考虑到了这种
阅读全文
摘要:这题主要考察对“卫星电话”的理解,k个卫星电话相当于可以让k个联通块保持联通,因此我们只需要让原图连成k个联通块,然后给每个联通块的任意一个节点发一部卫星电话即可。因此我们需要连n-k条边,特别地,当k=0时只需要连n-1条边 一定要好好读题!!!题目要求求边权的最大值,毒瘤样例求最大值,最小值,边
阅读全文
摘要:因为D[i]表示i号节点到1号节点的最短路径,所以可以先以1为源点跑一边SPFA,预处理出每个点到1号节点的最短路。之后开始考虑所谓的“最短路径生成树”,在这棵生成树中有以下性质:当fa[i]==node时,必满足dist[node]+w(node,i)=dist[i],但是dist[node]+w
阅读全文