12 2017 档案
摘要:题目: 求树上两点之间第k小点权 题解: 对每个节点到根节点的路径建一棵线段树,这样每个点的线段树都从他父亲得到 对于询问(u,v),sum[u]+sum[v]-sum[lca]-sum[fa[lca]]可以表示u到v的路径
阅读全文
摘要:#include<cstdio> #include<algorithm> #define N 200010 #define which(u) (ls[f[(u)]]==(u)) using namespace std; int n,m,a,f[N],ls[N],rs[N],val[N],d,tot,
阅读全文
摘要:题目: 给个序列,问[l,r]区间内是否存在x>(r-l+1)>>1 题解: 好像大家都觉得这个题比较简单,没人写题解啊 先说BZOJ样例的格式应该是,第二个数是序列中数的范围(就是不用离散化) 10 3 1 2 1 2 1 2 3 2 3 3 8 1 2 1 3 1 4 1 5 2 5 2 6 6
阅读全文
摘要:题目: 洛谷也能评测 题解: De了好长时间BUG发现是自己sort前面有一行for没删,气死. 题目询问第x秒时候前k小的P值之和. 朴素想法: 我们可以把P值离散化,然后对于每个时刻建一棵定义域是离散化后P值的线段树 每个节点维护了这个节点代表区间的任务个数和这些任务离散化之前的P值之和, 对于
阅读全文
摘要:#include #include #include #define N 100005 #define M N*20 using namespace std; int n,m,Q,a[N],b[N],rt[N],pool; int read() { int ret=0,neg=1;char j=getchar(); for (;j>'9' || j='0' && j>1; ...
阅读全文
摘要:题目: 题解:
阅读全文
摘要:题解: 每次reverse(l,r) 把l-1转到根,r+1变成他的右儿子,给r+1的左儿子打个标记就是一次反转操作了 每次find和dfs输出的时候下放标记,把左儿子和右儿子换一下 记得建树的时候建0到n+1
阅读全文
摘要:#include #include #include #define N 80010 #define which(x) (ls[fa[(x)]]==(x)) using namespace std; int id[N],pos[N],sz[N],ls[N],rs[N],fa[N],tot,n,m,root,a[N]; char op[233]; void pushup(int x) {sz[x]...
阅读全文
摘要:题目: 洛谷也能评测....还有我wa了10多次的记录233 题解: 不要想得太复杂,搞一个全局变量记录一下工资的改变量Delta,这样可以等询问的时候就输出val+Delta,然后插入的时候插入x-Delta 不要想会不会有员工工资一样,直接插入就好,这样省不少代码量. 对于降工资操作,插入一个m
阅读全文
摘要:题目: 洛谷也能评 题解: 记录一下当前树维护是宠物还是人,用Splay维护插入和删除. 对于任何一次询问操作都求一下value的前驱和后继(这里前驱和后继是可以和value相等的),比较哪个差值绝对值小就好啦
阅读全文
摘要:下面给出Splay的实现方法(复杂度证明什么的知道是 nlogn 就可以啦) 首先对于一颗可爱的二叉查找树,是不能保证最坏nlogn的复杂度(可以想象把一个升序序列插入) (二叉查找树保证左子树元素大小都小于根元素大小,根元素大小都小于右子树元素大小,且子树都是二叉查找树) 所以我们需要一些非常巧妙
阅读全文
摘要:题目: 南开OJ有非权限提交处 http://oi.nks.edu.cn/zh/Problem/Details/2739 题解: 鹅鹅鹅....有三维(t,x,y),所以可以用CDQ解决的好题 初始点就是t超级小的点 先按x排个序,时间作为分治的第二维,这样只有前半段时间的修改操作对后半段时间的询问
阅读全文
摘要:题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1176 题解: 题目s无用 其实是CDQ还是能够看出来的,就是怎么做需要考虑考虑 首先对于一个区间的询问我们可以通过二维前缀和的方式转化成四个前缀询问,这样就可以用树状数组这类数据结构很快维护一维
阅读全文
摘要:题目:https://www.luogu.org/problemnew/show/3157 题解: 1.对于静态的逆序对可以用树状数组做 2.我们为了方便可以把删除当成增加,可以化动为静 3.找到三维:时间,位置,大小 然后CDQ分治
阅读全文
摘要:题目: 给一棵点带权树,求树上路径是三的倍数的路径与总路径个数之比,输出最简分数 题解: 树分治 建一个cnt数组储存长度%3的路径有多少 计算的时候return cnt[0]*cnt[0]+cnt[1]*cnt[2]*2 其他的同树分治板子了
阅读全文
摘要:求树上最长路径使得经过的拥挤节点个数不超过K
阅读全文
摘要:题目: 给出若干个点 求三个点构成的周长最小的三角形的周长(我们认为共线的三点也算三角形) 题解: 可以参考平面最近点对的做法 只不过合并的时候改成枚举三个点更新周长最小值,其他的和最近点对大同小异
阅读全文
摘要:题目: 给出一个整数集合,求出非空子集中元素和绝对值最小是多少(元素个数尽量少) 题解: 分成两半 爆搜每一半,用map维护前一半的值 每搜出后一半的一个值就去map里找和他和绝对值最小的更新答案
阅读全文
摘要:参考这个博客
阅读全文
摘要:题目: 给n个长度为l[i](浮点数)的绳子,要分成k份相同长度的 问最多多长 题解: 二分长度,控制循环次数来控制精度,输出也要控制精度<wa了好多次>
阅读全文
摘要:题目: 题解: 大概是黄学长的博客
阅读全文
摘要:题目: 给你n个点,保证这些点都在凸包上(顶点或者边上),问这个凸包是不是一个稳定的凸包, 稳定被定义为: 存在一个点使得原来的点都在包含该点和原来的点的凸包上 题解: 题目中的要求等价于问每条边上的点超没超过三个 如果存在不够三个的就不是稳定的 Graham算法保证只求凸包的顶点,所以我们可以枚举
阅读全文
摘要:题目: 给n个点,输出距离最远的一对点的距离的平方 题解: 旋转卡壳模板! 首先可以肯定的是最远的点一定是凸包的一对顶点!(这个正确性是很显然的) 所以我们枚举每个顶点所在的边,将它平移,平移到经过的最远一个点就是含有这个点的最远距离 所以N2是可以解决的! 但是这个和枚举点是没区别的. 但是如果我
阅读全文
摘要:题目: 给几个点,用绳子圈出最大的面积养牛,输出最大面积/50 题解: Graham凸包算法的模板题 下面给出做法 1.选出x坐标最小(相同情况y最小)的点作为极点(显然他一定在凸包上) 2.其他点进行极角排序<极角指从坐标轴的某一方向逆时针旋转到向量的角度>, 极角一样按距离从近到远(可以用叉积实
阅读全文
摘要:#include #include #include #include #define eps 1e-8 using namespace std; bool dcmp(double x,double y) { if (fabs(x-y)>eps) return 1; return 0; } struct point { double x,y; point () {...
阅读全文
摘要:题目: 给一个管子,有很多转弯处,问从管口的射线射进去最长能射到多远 题解: 根据黑书,可以证明的是这条光线一定经过了一个上顶点和下顶点 所以我们枚举每对上下顶点就可以了
阅读全文
摘要:#include #include #include #define N 105 #define eps 1e-8 using namespace std; double abs (double x) { return x>0?x:-x; } bool dcmp(double x,double y) { if (abs(x-y) eps) return 0; return...
阅读全文
摘要:题意: 给一个矩形的区域(左上角为(x1,y1) 右下角为(x2,y2)),给出n对(u,v)表示(u,y1) 和 (v,y2)构成线段将矩形切割 这样构成了n+1个多边形,再给出m个点,问每个多边形内有多少个点. 读入为n,m,x1,y1,x2,y2 n个数对(u,v),m个数对(x,y) (n,
阅读全文
摘要:给个多边形 计算面积 输出要四舍五入 直接用向量叉乘就好 四舍五入可以+0.5向下取整
阅读全文
摘要:求两直线交点
阅读全文
摘要:题目: 给个n个点的多边形,n个点按顺序给出,给个点m,判断m在不在多边形内部 题解: 网上有两种方法,这里写一种:射线法 大体的思想是:以这个点为端点,做一条平行与x轴的射线(代码中射线指向x轴正方向) 如果交点个数为奇数的话就在内部,如果为偶数(包括0)就在外部
阅读全文
摘要:原题链接 //中文题好感动啊!!! 题解: 比较裸的AC自动机吧,对所有模式串建个AC自动机之后 用网站源码在上面跑匹配. 注意AC自动机建的时候字符集是26就好,遇到源码中别的字符直接回到Root 每个结尾节点记个CNT,我也不知道不记会不会跪 还有!注意这是个多组数据
阅读全文
摘要:题目: 给一个字母矩阵和几个模式串,矩阵中的字符串可以有8个方向 输出每个模式串开头在矩阵中出现的坐标和这个串的方向 题解: 我们可以把模式串搞成AC自动机,然后枚举矩阵最外围一层的每个字母,向八个方向进行匹配 代码中danger标记为判断这个节点是不是一个模式串的结尾, 这道题可以直接字符串反向构
阅读全文
摘要:题目: 给定 n 个长度不超过 10 的数字串,问其中是否存在两个数字串 S, T ,使得 S 是 T 的前缀。多组数据,数据组数不超过 40. 题解: 前缀问题一般都用Trie树解决: 所以跑一个Tire树,记录一下每个节点是不是结尾就好
阅读全文
摘要:给一个字符串,求最长回文字串有多长
阅读全文
摘要:题目: 给个n*n的带正权矩阵,k次从(1,1)走到(n,n),每个格子的权值只能获得一次,每次只能向右或下走 问获得最大权值 题解: 求最大权值可以把权值变成负的求最小 然后考虑怎么约束每个格子的权值, 把格子拆成两个点,连两条边:一条容量为1,花费为-权值,一条容量为INF,花费为0 S到第一个
阅读全文
摘要:给个地图有人和房子 保证人==房子,每个人移动到房子处需要花费曼哈顿距离的代价 问让人都住在房子里最小代价 显然是个带权二分图最大匹配 转化成以一个网络,规定w是容量,c是代价 1.S向人连边,w=1,c=0 2.房子向T连边,w=1,c=0 3.人向房子连边 w=1,c=距离
阅读全文
摘要:题目: 给一个有向带权图,问从0到n-1存不存在两条路径保证不存在公共点 若存在输出最小权值和 题解: 先把点编号都++ S向1连权值为0,容量为2,n向T连权值为0,容量为2的点 原始图中每条边(u,v)从u向v连权值为边权,容量为1的点 如果最大流为2就输出最小费用 否则不存在
阅读全文
摘要:题目: 给n个订单和m个车间,每个车间对于每个订单有一个处理时间,一个车间只能同时且完全处理一个车间 问最小平均时间 题解: 考虑把车间拆点,对于每个时间的车间拆开,这样对于第i个订单来说,他在第j个车间被倒数第k个处理就要花费k*z[i][j]的时间 建图: 1.S向每个任务连w=1,c=0边 2
阅读全文
摘要:#include #include #include #include #define N 200100 #define INF 100000000 using namespace std; int ecnt=1,vis[N],dist[N],n,m,S,T,ans,head[N]; deque q; struct adj { int nxt,v,w,c; }e[N]; inline ...
阅读全文
摘要:一个点带权的图,有一些指向关系,删掉一个点他指向的点也不能留下,问子图最大权值 题解: 这是最大权闭合团问题 闭合团:集合内所有点出边指向的点都在集合内 构图方法 1.S到权值为正的点,容量为权值 2.权值为负的点到T,容量为权值绝对值 3.原图所有点容量为INF 4.正权值和-最小割=最大权值 5
阅读全文
摘要:题面: 有两个集合,现在又n个点,第i个点在A集合花费Ai代价,在B集合花费Bi代价 然后又m个限制,每个限制是a,b,c,说a和b如果不在一个集合就会多花费c代价。 现在要让每个点属于一个集合,求最小代价 题解: 相当于把n个点划分为两个集合,我们设A为源点S,B为汇点T,对于每个点向S和T连权值
阅读全文
摘要:将牛拆为两个点. 原点向食物连边,食物向牛1连边,牛1向牛2连边,牛2向饮料连边,跑最大流即可
阅读全文

浙公网安备 33010602011771号