摘要: 题意:你有a个黄水晶和b个蓝水晶,要求要x个黄水晶球(2黄),y个绿水晶球(1黄1蓝),z个蓝水晶球(3蓝),问还要多少水晶题解:模拟 C++ Code: 阅读全文
posted @ 2018-01-07 20:02 Memory_of_winter 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 题目大意:有两匹马,马可以走"日",也可以像象走"田",求它走到(1,1)的步数。 题解:bfs 卡点:边界判断成了可以走到(0,y)或(x,0) C++ Code: 阅读全文
posted @ 2018-01-01 20:43 Memory_of_winter 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。 题解:有多种做法 倍增:(写于2017-9-13) bfs函数:处理每个节点的深度(其实dfs更常用,当时我用的是bfs)和父亲(dad[i][0]) init函数:处理每个节点的二的整数幂的父亲,dad[i][j]存的是第i个节点 阅读全文
posted @ 2017-12-16 12:59 Memory_of_winter 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 题目大意:树链剖分,有4个操作,1:把x->y路径上值都加上z,2:求x->y路径上值之和,3:把x的子树值都加上z,4:求x的子树值之和 题解:树链剖分,就是对一棵树分成几条链,把树形变为线性,减少处理难度 具体每个函数的作用见程序 C++ Code: 阅读全文
posted @ 2017-12-15 19:18 Memory_of_winter 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给你n个数,要求输出其中前1,3,……,2k-1个数的中位数题解:第一个中位数是第一个数,每次读两个数,若一小一个大,那么不变;若大大,中位数变成比他小的最大数;反之,中位数变成比他大的最小数。然后可以用一个大根堆和一个小根堆维护(代码中small为比现中位数小的数,即大根堆;big为比现 阅读全文
posted @ 2017-12-10 20:18 Memory_of_winter 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 题目大意:有30000个船,第i个船在第i列,两个操作,M:把第i列的船整体拼到第j列船后,C:求第i和第j个船之间的船的个数题解:可以想到用并查集,在基础的并查集上增加路径,用num数组存第i个船到队首的距离,用len存这一列的船的个数。问题主要在路径压缩上维护num数组上。可以在find的过程中 阅读全文
posted @ 2017-12-10 15:54 Memory_of_winter 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 题目大意:有n个人,关系为:朋友的朋友是朋友,敌人的敌人是朋友。如果是朋友就在一个团队内,是敌人就不在,现在给出一关系,问最多有多少团伙。题解:并查集,建反集,如果是朋友,就把他们的并查集合并;如果是敌人,就把他们分别和对方的反集合并,统计最后有几个联通块 C++ Code: 阅读全文
posted @ 2017-12-05 16:29 Memory_of_winter 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 题目大意:有一个无向图,依次击破一些点,求每次击破后的联通块个数题解:离线解决,把击破变成添加,倒着处理,每次添加节点时把与它相连的边加入图中,用并查集维护,求出答案 C++ Code: 阅读全文
posted @ 2017-12-05 15:49 Memory_of_winter 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 题目大意:有两个操作,1:在第x次操作后的版本上修改一个值,2:查询在第x次操作后的版本上的一个节点的值 即: 你需要维护这样的一个长度为N的数组,支持如下几种操作 1.在某个历史版本上修改某一个位置上的值 2.访问某个历史版本上的某一位置的值 此外,每进行一次操作(对于操作2,即为生成一个完全一样 阅读全文
posted @ 2017-11-28 16:05 Memory_of_winter 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给你一个无向图,每个节点的重要值为任意两个节点(三个节点互不相同)相连时通过这个节点的可能性,求出每个节点的重要值 即: 令Cs,t表示从s到t的不同的最短路的数目,Cs,t(v)表示经过v从s到t的最短路的数目;则定义 为结点v在社交网络中的重要程度。 题解:用变形的floyd,先求出i 阅读全文
posted @ 2017-11-26 20:45 Memory_of_winter 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 题目大意:有一个有向图,有多个询问,每个询问给你a和b,要你求出a->b路径上最小的最大值 题解:因为是求点对之间的最小的最大值,可以用变形的Floyd来解,f[i][j]=min(f[i][j],max(f[i][k],f[k][j])) C++ Code: 阅读全文
posted @ 2017-11-24 19:41 Memory_of_winter 阅读(195) 评论(0) 推荐(1) 编辑
摘要: 题目大意:给你一个有向图,让你找到一条S->T的路径是的该路径上最大值最小 题解:因为是求最小的最大值,很容易想到二分答案,我们可以二分这个最大值,然后进行判断,用并查集维护,把所有路径中小于等于该值的路径的两头合并,最后判断如果S和T的父亲相同就是合法的解,记录一下,最后输出答案 C++ Code 阅读全文
posted @ 2017-11-22 14:13 Memory_of_winter 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 题目大意:有一串数,有一个长度为k的木板,求木板每次移动后覆盖的最大值 题解:单调队列 C++ Code: 阅读全文
posted @ 2017-11-15 14:16 Memory_of_winter 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 题目大意:求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解。 题解:即求a在mod b意义下的逆元,这里用扩展欧几里得来解决 C++ Code: #include<cstdio> using namespace std; int a,b,x,y; int exgcd(int a,i 阅读全文
posted @ 2017-11-10 10:32 Memory_of_winter 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给你n,求出一个n*n的人阵,你站在左下角,最多可以看到多少人 题解:转换一下,就成了求(n-1)*(n-1)中有多少个x,y轴互素的坐标,然后加上你上面的,你右边的,你右上方的三个人。 用欧拉筛筛出n及以内的质数,欧拉筛最大特点是它的时间复杂度是O(n)的(它还可以求出phi,即比它小的 阅读全文
posted @ 2017-11-10 09:48 Memory_of_winter 阅读(146) 评论(0) 推荐(0) 编辑