自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

scf0920

退役ACMer渣

  • 博客(643)
  • 收藏
  • 关注

原创 HDU 4871 Shortest-path tree (最短路+树上点分治)

题目地址:HDU 4871 先用最短路求出根节点到其它各点的最短距离,然后利用最短距离DFS一下构造出最短路树,然后剩下的就是在构造出来的这棵树上做树分治,很简单的树分治。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <s

2015-07-12 09:22:19 1383

原创 HDU 4812 D Tree (树上点分治)

题目地址:HDU 4812 这题是13年南京区域赛的现场题。 树分治思想。 树分治的过程中记录下每个子树的所有到达根的路径的积,用best记录下每个积的最小端点,然后再枚举当前子树的每个积,然后用逆元的方法求出当积为k时所需要的另一个端点值,并更新答案。 代码如下:#include <iostream>#include <string.h>#include <math.h>#inclu

2015-07-11 11:14:49 1288

原创 SPOJ 1825 FTOUR2 - Free tour II (树上点分治)

题目地址:SPOJ 1825 树分治的题果然除了模板题就是金牌题啊。。。这题是一道论文题,想了好长时间。。。。终于过了,,,,注意一个坑点,如果权值全部为负的话,是可以不选任意一条边的,这样权值为0。。。也就是说初始值要设为0。。。 具体看漆子超的论文《分治算法在树的路径问题中的应用》。。 代码如下:#include <iostream>#include <string.h>#includ

2015-07-10 15:35:24 1430 1

原创 Codeforces Round #311 (Div. 2) E. Ann and Half-Palindrome (DP+字典树)

题目地址:传送门 先用dp求出所有的符合要求的半回文串,标记出来。然后构造字典树。然后再dfs一遍求出所有节点的子树和,最后搜一遍就能找出第k个来了。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#i

2015-07-02 21:39:06 989

原创 BZOJ 2152 聪聪可可 (树上点分治)

题目地址:BZOJ 2152 找有多少对权值和为3的倍数的点。最简单的点分治。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#include

2015-06-29 23:51:59 1152 1

原创 Codeforces Round #310 (Div. 1) C. Case of Chocolate (线段树)

题目地址:传送门 这题虽然是DIV1的C。。但是挺简单的。。只要用线段树分别维护一下横着和竖着的值就可以了,先离散化再维护。每次查找最大的最小值<=tmp的点,可以直接在线段树里搜,也可以二分去找。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm

2015-06-29 21:03:52 1097

原创 POJ 2114 Boatherds (树上点分治)

题目地址:POJ 2114 点分治水题。只是把距离小于等于k改成了等于k。稍微加一点处理就可以了。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set

2015-06-29 20:45:56 1055

原创 POJ 1987 Distance Statistics (树上点分治)

题目地址:POJ 1987 点分治模板题,跟POJ 1741几乎一样,。。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#include <

2015-06-27 21:25:54 1206

原创 POJ 1741 Tree (树上点分治)(楼教主男人八题之一)

题目地址:POJ 1741 树分治第一发! 树分治详情请看漆子超的国家集训队论文,论文传送门 树分治裸题。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#includ

2015-06-26 11:55:46 1138

原创 POJ 3107 Godfather (树的重心)

题目地址:POJ 3107 还是裸的树的重心,只不过这个要求将所有的重心都输出。很简单。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#in

2015-06-24 19:41:53 967

原创 POJ 1655 Balancing Act (树的重心)

题目地址:POJ 1655 树的重心定义为:找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡. 树的重心可以用树形DP快速的找出来。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>

2015-06-24 19:31:26 880

原创 HDU 5269 && BestCoder #44 1002 ZYB loves Xor I (分治)

题目地址:HDU 5269 比赛的时候想到了分治的思路,但是脑残了。,。写麻烦了。。。调了好久也没调出来。。赛后优化了一下。。就过了。。 我的思路是先排序,排序是按照的将每个数字的二进制表示倒过来的字典序从大到小排,比如样例2中的2,6,5,4,0,二进制分别是010,110,101,100,000,排序之后是 101 110 010 100 000 这样的话就把后缀相同的都给放在一

2015-06-13 21:45:16 1008

原创 Codeforces Round #306 (Div. 2) D.E. 解题报告

D题:Regular Bridge 乱搞。构造 这题乱搞一下就行了。构造一个有桥而且每个点的度数都为k的无向图。方法很多,也不好叙述。。 代码如下:#include <cstdio>#include <cstring>#include <cmath>#include <queue>#include <stack>#include <map>#include <algorithm>

2015-06-10 17:27:03 1021

原创 HDU 5266 pog loves szh III (线段树+在线LCA转RMQ)

题目地址:HDU 5266 这题用转RMQ求LCA的方法来做的非常简单,只需要找到l-r区间内的dfs序最大的和最小的就可以,那么用线段树或者RMQ维护一下区间最值就可以了。然后就是找dfs序最大的点和dfs序最小的点的最近公共祖先了。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>

2015-06-08 14:41:21 1453

原创 Codeforces Round #305 (Div. 1) A.B.C 解题报告

A. Mike and Frog 枚举。 先是找循环,然后很容易得出一个两元一次方程,然后可以发现解也是有循环节的,所以最小的那个肯定出现在一定范围内,否则就后面也不可能出现。假设两个变量为x,y,系数分别为z1,z2。很显然,两者的最小公倍数便是一个周期,所以如果枚举x的话,只需要枚举到z2就可以了。 细节比较多。。错了好多次。。比赛中也跪了。。 代码如下:#include <iostre

2015-05-28 00:47:38 1421 2

原创 ZOJ 3203 Light Bulb (三分+计算几何)

题目地址:ZOJ 3203 第一发三分。三分的原理还是挺简单的。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#include <stdio

2015-05-27 19:31:50 1093

原创 LightOJ 1348 Aladdin and the Return Journey (树链剖分)

树链剖分模板题。 最近一直有比赛。。好长时间没写了。明显生疏了。。找个模板题熟悉一下。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#inc

2015-05-26 17:46:34 1367 2

原创 第6届山东省赛总结帖

又是一年省赛时。在这次省赛之前,窝们队刚经历了换队友风波,这次终于有了一个稳定,积极,一起为共同的目标而努力的队伍。在以很快的速度换完队友之后,距省赛还有不到两个月了。于是每周四在CF的gym上自加一场练习赛,然后加上周末的周赛,每周双赛,跟新队友ly之间的配合也越来越好。我总算把剩下的不算很难的图论知识点都刷完了,+cai也刷了一大堆数据结构,ly也刷了很多数学。(于是计算几何仍然没人刷。。)。

2015-05-20 14:34:03 1697

原创 BZOJ 2243 [SDOI2011] 染色 (树链剖分)

题目地址:BZOJ 2243 普通的树链剖分,用线段树维护区间段数与最左边和最右边的颜色。然后当合并区间的时候判断一下左儿子的右端与右儿子的左端是否相同,若相同,则将和减去1.同样,在迭代求值的过程中,也要记录下上条链的最顶端的颜色。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#

2015-05-08 10:19:55 972

原创 HDU 3333 Turing Tree (离线询问+线段树)

题目地址:HDU 3333 将询问离线保存下来,然后将数组的点离散化,记录每个值上一次出现的位置。然后枚举数组的数,若当前枚举的数前面出现过,那么就删掉前面出现过的那个位置上的数,更新当前这个位置上的数,然后那些所有询问的右端点为当前位置的就可以通过查询来得到结果了。 更新与查询用线段树来优化。 代码如下:#include <iostream>#include <string.h>#inc

2015-05-06 17:06:10 1050

原创 BZOJ 1036 [ZJOI2008] 树的统计Count (树链剖分)

题目地址:BZOJ 1036 树链剖分裸题,需要用线段树同时维护最大值与和值两个信息,只是代码量大一点而已。。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#includ

2015-05-05 00:12:24 1471

原创 FZU 2082 过路费 (树链剖分)

树链剖分裸题。。。不多说。。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#include <stdio.h>using namespace

2015-05-04 22:34:02 1332

原创 POJ 3237 Tree (树链剖分)

题目地址:POJ 3237 这题用了一下午。。本来一直认为max和min两个数组是不用改的,只需要改lazy数组,然后在查询的时候利用lazy标记来返回max或-min,后来发现错的很严重。。 这题要在pushdown中修改max和min数组,从而实现最大值取反。 代码如下:#include <iostream>#include <string.h>

2015-05-04 20:17:03 1036

原创 POJ 2763 Housewife Wind (树链剖分)

题目地址:POJ 2763 还是树链剖分模板题。。。不多说。。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#include <stdio.

2015-05-01 20:14:40 1299

原创 HDU 3966 Aragorn's Story (树链剖分)

题目地址:HDU 3966 树链剖分模板题。不多说、、 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#include <stdio.h>u

2015-05-01 17:28:54 1188 2

原创 SPOJ 375 QTREE系列-Query on a tree (树链剖分)

题目地址:SPOJ 375 树链剖分第一发! 果然是个貌似很高级的数据结构,其实就是把树的边从树形结构转化成了线性结构,从而可以用线段树或树状数组之类的数据结构进行快速维护。从而将时间缩到n*log(2*n). 这题用的线段树维护的。 代码如下:#include <iostream>#include <string.h>#include <math.h>#i

2015-04-30 00:09:17 1461

原创 NYOJ 737 石子合并(一) (区间DP+平行四边形优化)

题目地址:NYOJ 737 定义状态dp [ i ] [ j ]为从第i个石子到第j个石子的合并最小代价。 没有优化的代码如下:耗时248ms。#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <m

2015-04-24 20:24:27 2221

原创 POJ 2728 Desert King (最优比率生成树---01分数规划)

题目地址:POJ 2728 01分数规划的应用之一—最优比率生成树。 跟普通的01分数规划类似,只是这题的验证函数改成了最小生成树来验证。弱用的迭代法。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>

2015-04-24 17:22:02 906

原创 POJ 2976 Dropping tests (01分数规划)

题目地址:POJ 2976 关于01分数规划的详细介绍都在这里了,传送门。 先写了发二分法的,迭代法的待会更新。 二分代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#in

2015-04-24 11:02:36 979

原创 POJ 3723 Conscription (最大生成树)

题目地址:POJ 3723 最大生成树。。跟最小生成树原理一样。只是排序的顺序改变了而已。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#i

2015-04-23 21:09:43 871 1

原创 HDU 2121 Ice_cream’s world II (不定根最小树形图)

题目地址:HDU 2121 这题没有给定根。最容易想到的当然是暴力,枚举所有的根,但是TLE是显然的。。为了处理不定根的情况,可以虚拟一个根,然后用这个根去跟所有的点连边,权值为其他所有权值的和+1,目的是防止成为最小树形图的一条边。然后跑出最小树形图后,那么这个虚拟根肯定跟一个实际根相连,这时候根就找到了,然后再在最终的总花费中减去虚拟的那条边的权值就可以了。 代码如下:#include <i

2015-04-20 20:58:30 857

原创 HDU 4966 GGS-DDU (最小树形图-朱刘算法)

题目地址:HDU 4966 刚开始没看清总级别只有500这一条件,看成了每一个都是500。。然后建图思路就想歪了。。。。。后来才发现是总共只有500。。那么建图就很简单了。。把每个科目的每个等级都设为一个点,把所有的0等级设为同一个树根。然后把所有科目的高等级向低等级连一条权值为0的有向边,第一个作用是保证最后的最小树形图是所有点都可达,第二个作用是保证每节课的的所需等级,只要达到高等级,那么使低

2015-04-20 17:13:20 1103

原创 TJU 2248 Channel Design (最小树形图-朱刘算法)

题目地址:TJU 2248 最小树形图模板题。熟练一下模板。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#include <stdio.h

2015-04-20 15:50:49 787

原创 POJ 3164 Command Network (最小树形图-朱刘算法)

题目地址:POJ 3164 最小树形图第一发。 把一个v写成u了。。。。。TLE了一晚上。。。(虽说今晚出去玩了。。) 刚开始看这个算法的时看模板以为又是一个isap。。。。吓得一个哆嗦。但是仔细看了看之后发现还是挺好理解的。写下自己的理解。 朱刘算法其实只有3步,然后不断循环。 1:找到每个点的最小入边。既然

2015-04-20 00:17:01 1601 1

原创 Codeforces Round #294 (Div. 2) E. A and B and Lecture Rooms(倍增LCA+树形DP)

题目地址:http://codeforces.com/contest/519/problem/E 这题作为E题来说挺水的。先用树形DP求出每个节点的子树的所有节点的个数。然后询问的时候先找到u,v路径中的中点,然后分情况讨论求出个数来就好了。。 犯了好多**错误。。。终于调试出来了。。。 代码如下:#include <stdio.h>#include <string.h>#include

2015-04-17 23:16:21 1707

原创 SPOJ 913 QTREE系列- Query on a tree II (倍增LCA)

题目地址:QTREE2 - Query on a tree II LCA学了离线与在线转RMQ方法后就去做这道题,于是想了好长时间也没想到怎么做。看了题解都是用的倍增LCA。。于是又去学了下倍增法求LCA,这才发现用倍增法做简直是水题。。。因为求路径的第k个点可以转化成求第k个父节点,然而倍增法的原理就是根据的父节点,于是这题就很容易解决了。。 求距离很好求。关键

2015-04-13 20:26:59 944

原创 POJ 1986 Distance Queries (在线LCA转RMQ)

题目地址:POJ 1986 纯模板题。输入的最后一个字母是多余的,完全不用管。还有注意询问的时候有相同点的情况。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#inclu

2015-04-09 12:13:47 909

原创 POJ 1470 Closest Common Ancestors (在线LCA转RMQ)

题目地址:POJ 1470 LCA模板题。。输入有点坑,还有输入的第一个结点不一定是根节点。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#

2015-04-09 11:38:25 785

原创 POJ 1330 Nearest Common Ancestors (在线LCA转RMQ)

题目地址:POJ 1330 在线LCA转RMQ第一发。所谓在线LCA,就是先DFS一次,求出遍历路径和各个点深度,那么求最近公共祖先的时候就可以转化成求从u到v经过的点中深度最小的那个。 纯模板题。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorith

2015-04-08 21:21:35 777

原创 HDU 1806 && POJ 3368 Frequent values (RMQ)

既然是非降序,那么相等的点一定都聚集在了一块,然后将相等的点分成一段。然后记录每一段的长度,最右端与最左端,然后记录原数列上每个位置上属于哪一段的标号。然后对于每个询问都可以分成3部分,分别计算每一部分,然后对这三部分取最大值。代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#inclu

2015-04-05 21:25:41 789

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除