自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1296)
  • 收藏
  • 关注

原创 bzoj 1029: [JSOI2007]建筑抢修 (贪心+优先队列)

题目描述传送门题目大意:修复每一个建筑都需要一定的时间,如果某一个建筑不能在某一个时刻前被修复就永不能被修复了,问最多能修复多少个建筑题解贪心 按照结束时间从左到右排序,每次加入一个任务如果能加入就直接加入并把该任务的时间加入大根堆,如果不能就对比当前任务的时间与堆顶元素的时间,如果小的话就替换。代码#include<iostream>#include<cstdio>#include<algo

2017-06-05 21:55:40 298

原创 bzoj 3294: [Cqoi2011]放棋子 (容斥原理+组合数+DP)

题目描述传送门题目大意:在一个n*m的棋盘中放入一些颜色不同的棋子,每个格子最多只能放一个棋子,不同颜色的棋子不能放在同一行或同一列,求合法的方案数。题解相当于每行每列只能被一种颜色占据。 那么我们可以给每个颜色分配行列数。g[p][i][j]g[p][i][j]表示第p中颜色占据i行j列的方案数。 如果能求出g,那么我们就可以做二维背包. f[t][i+k][j+l]+=f[t−1][i][

2017-06-05 20:13:28 566

原创 bzoj 1801: [Ahoi2009]chess 中国象棋 (组合数+DP)

题目描述传送门题目大意:在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮。 请问有多少种放置方法。(ps:炮必须是隔一个打一个)题解转述一下题意就是:每行每列最多选2个位置的方案数。 f[i][j][k]f[i][j][k]表示到第i行,有j列有0个数,k列有1个数的方案数。代码#include<iostream>#include<cstdio>#include<a

2017-06-05 18:46:53 387

原创 bzoj 4372: 烁烁的游戏 (动态点分治+线段树+LCA)

题目描述传送门题目大意:给一颗n个节点的树,边权均为1,初始点权均为0,m次操作: Q x:询问x的点权。 M x d w:将树上与节点x距离不超过d的节点的点权均加上w题解对于每个点开一棵线段树,线段树中维护到这个点距离为x的所有增量。 修改一个点的时候需要修改这个点到点分树的根路径上所有点的答案。 查询的时候也是一样。代码#include<iostream>#include<cstdi

2017-06-05 10:07:14 1056

原创 bzoj 4337: BJOI2015 树的同构 (树hash)

题目描述传送门题目大意:对于两个树T1和T2,如果能够把树T1的所有点重新标号,使得树T1和树T2完全相 同,那么这两个树是同构的。给你M个有根树,请你把它们按同构关系分成若干个等价类。题解感觉树hash好玄学啊,用poj1635的方式根本过不了。。。 这次的字符基不再是一个大质数,而是每一位对应一个不同的质数。 如果两个树同构那么一定是树中的每个节点都可以意义对应。因为重新编号后不一定那个点

2017-06-01 18:56:03 592

原创 poj 1635 Subway tree systems (树同构)

题目描述传送门题解树同构问题。 昨天考试的时候用到了有根树(儿子有顺序)的同构判断。 我的想法是dfs得到树的dfs序,然后将dfs序中的每个位置替换成这个位置的点的儿子数,然后对数列进行hash。这样其实就转换是序列的hash. 但是这道题儿子是没有顺序的,所以如果只是用上面的方式肯定不行。对于每个节点,现将所有儿子的hash进行排序,然后得到的序列再进行hash。一层一层的向上算,最终得到

2017-06-01 07:19:33 378

原创 bzoj 1207: [HNOI2004]打鼹鼠 (DP)

题目描述传送门题解因为所有的地鼠的出现顺序是有序的,所以可以直接DP f[i]表示到第i只地鼠且第i只地鼠必选所能打到的最多的地鼠的数量。 枚举出现在他前面的地鼠,判断是否可以转移,然后更新DP数组即可。这道题的话O(n2)O(n^2)其实就可以通过,不过可以通过加剪枝(优化)使其达到比较科学的速度。代码#include<iostream>#include<cstdio>#include<a

2017-05-29 20:28:38 276

原创 bzoj 1601: [Usaco2008 Oct]灌水 (最小生成树)

题目描述传送门题目大意:Farmer John已经决定把水灌到他的n(1<=n<=300)块农田,农田被数字1到n标记。把一块土地进行灌水有两种方法,从其他农田饮水,或者这块土地建造水库。 建造一个水库需要花费wi(1<=wi<=100000),连接两块土地需要花费Pij(1<=pij<=100000,pij=pji,pii=0). 计算Farmer John所需的最少代价。题解等价于把所有的点分成

2017-05-29 07:33:04 637

原创 Codeforces 526E. Transmitting Levels (贪心)

题目描述传送门题目大意:把一个环进行划分,使每部分的和<=m,求划分成最小的段数。题解如果是一条链的话,划分的时候肯定是从左往右能放在一个区间就放在一段区间。 那么如果是环的话我们将两个链接起来贪心的进行划分,然后枚举断开的位置判断最前面的段与最后面的段是否能放到一段中,用这种划分的答案更新最终的答案。代码#include<iostream>#include<cstdio>#include<a

2017-05-28 19:33:48 463 1

原创 Codeforces 519E. A and B and Lecture Rooms (LCA)

题目描述传送门题目大意:每次询问到x,y距离相等的点有几个题解找到x,y路径的中点 除去中点连接的x,y所在的子树的size就是答案。 x,y有可能不在中点的子树中,两种情况分类讨论一下就可以了。代码#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define N

2017-05-28 15:12:44 359

原创 Codeforces 459E. Pashmak and Graph (DP)

题目描述传送门题目大意:求边权单调递增的最长路题解将所有的边按照边权从小到大排序。f[i]表示到达i点的最长合法路径的长度。 对于相同边权的一起处理,因为之前加入的都是比当前边权小的边,所以一定可以连接起来,直接用起点更新终点的答案即可。代码#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>#includ

2017-05-28 14:57:59 450

原创 Codeforces 455C. Civilization (树的直径+并查集)

题目描述传送门题目大意: (1)询问x所在连通块的最长链 (2)将x,y所在的连通块合并,任意两个点之间可以连边,使合并后连通块的最长链最短。题解比较容易想到的是连接的两个点是两棵树的中心(最长链的中点)。 关键是连接后的树中点是否会改变呢?答案是连接后的中心是两棵树中最长链较长的树的中心。 那么我们把一个连通块的代表元素维护成树的中心,在这个点动态维护经过这个点子树中的最长链和次长链。

2017-05-28 13:56:57 370

原创 Codeforces 358D. Dima and Hares (DP)

题目描述传送门题目大意:对于每个位置的数,如果选他的时候左右两边的数都没选可得到a[i],两边已经选中了一个可以得到b[i],两边的数都选了可以得到c[i]。 第一个位置和第n个位置不能得到价值c,确定选取的顺序是价值和最大。题解假设在l,r放入得到两个位置的价值a,那么[l-1,r+1]中一定存在一种选取方式使其中只有一个数取c,剩下的都取b。 那么我们可以用f[i]表示到第i个且第i位一定选

2017-05-28 09:42:00 373

原创 Codeforces 811 E. Vladik and Entertaining Flags (线段树+并查集)

题目描述传送门题目大意:用公共边且颜色相同的两个块属于同一个连通块,每次询问一个区间中有多少个连通块块。题解线段树+并查集 比较基本的思路就是因为行数比较小所以可以对于每个区间的左右两列维护并查集。 维护的东西必须保证在该区间中可以连通的两个位置的编号相同。 两个区间合并的时候,将两个区间左右两列的编号在并查集中的父亲赋值成自己。如果两个区间相邻的位置颜色相同就用并查集合并起来,然后此时再从并

2017-05-28 08:26:38 1020

原创 bzoj 4713: 迷失的字符串 (树形DP+bitset)

题目描述传送门题目大意:有一棵n个节点的大树,上面每条边有一个小写字符。 对于任意两个不同的点u,v,我们可以在树上找到u出发到v终止的唯一的一条最短路径,并将沿途经过的边上的字符依次写下来,得到一个字符串。 对于一个字符串,如果存在这样一个点对(u,v),使得它们路径上的字符串与其完全匹配,那么我们就称这个字符串属于这棵树。 现在有m个迷失的字符串,请你写一个程序帮助判断每一条字符串是否属于

2017-05-27 20:53:37 1216 2

原创 bzoj 3574: [Hnoi2014]抄卡组 (字符串Hash)

题目描述传送门题目大意:’*’可以匹配任意长度个的字符(包含0个),问所有字符串是否两两匹配。题解对于两个都包含通配符的字符串,只要Lcp,Lcs的长度都等于到通配符较短的串的长度。 例如aaaa*aaaa和a*aa 只要LCP的长度等于1,LCS的长度等于2即可。剩下的中间部分可以通过通配符进行调整。 按照到第一个通配符的长度排序,然后相邻的用hash判断一下即可。 但是有一种情况 aaa

2017-05-27 10:18:59 1473 1

原创 bzoj 3307: 雨天的尾巴 (线段树合并+LCA)

题目描述传送门题目大意:N个点,形成一个树状结构。有M次发放,每次选择两个点x,y对于x到y的路径上(含x,y)每个点发一袋Z类型的物品。完成所有发放后,每个点存放最多的是哪种物品。题解如果我们修改了一条路径,那么在x,y处+1, lca(x,y),fa[lca(x,y)]处-1,那么对于每个点查询他的子树就能得到他的答案。其实就是树上差分。 对于每个位置维护以颜色为下标的线段树(动态开点),每个

2017-05-26 20:14:09 490

原创 bzoj 1756: Vijos1083 小白逛公园 (线段树)

题目描述传送门题目大意:求区间的最大连续子段和题解线段树维护区间左/右连续最大,区间最大连续子段,区间和 注意:输入不能保证a<=b代码#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define N 500003using namespace std;stru

2017-05-26 15:52:21 537

原创 bzoj 3319: 黑白树 (并查集)

题目描述传送门题目大意:给定一棵树,边的颜色为黑或白,初始时全部为白色。维护两个操作: 1.查询u到根路径上的第一条黑色边的标号。 2.将u到v 路径上的所有边的颜色设为黑色。 Notice:这棵树的根节点为1题解先将所有操作正着进行一遍,将所有的黑边相邻的点按照关系合并,就是一个集合中的代表元素一定是深度最小的点。 然后找出所有自始至终都是白色的边,以及每条边变黑的时间。将白边用并查

2017-05-26 15:21:51 1300

原创 bzoj 3126: [Usaco2013 Open]Photo (DP+单调队列)

题目描述传送门题目大意:给你一个n长度的数轴和m个区间,每个区间里有且仅有一个点,问能有多少个点题解想了各种不科学的贪心和乱搞,最终还是回到了DP上。 f[i]f[i]表示到第i个位置且第i个位置必放最多能放多少个点。 对于每个位置,他前一个能放置的位置应该是满足一个区间的。 因为一个区间中只能有一个点,所以包含这个点的所有区间都不能再放,就是要找到包含这个点的区间中左端点最小的位置,R[i]

2017-05-26 09:07:32 997

原创 bzoj 1017: [JSOI2008]魔兽地图DotR (树形DP+多重背包)

题目描述传送门题目大意:给出一棵树,树中的叶子节点可以直接购买,每个点有价格和数量限制,剩下的节点由他的所有儿子按照一定的数量合成,每个点有一个贡献值,给出M,问在花费不超过m的情况下贡献的最大值。 (注意一个点如果用于合成,那么他本身的贡献不会再计算)题解这道题后来新加了一组数据,所有点都是B类装备无需合成,那么实际上就是一个多重背包。特判一下就好了。 对于树,应该可以算是一种比较奇怪的树形依

2017-05-25 17:50:20 680

原创 FWT板子

感觉这东西用的不算多。所以先把板子记下来吧void FWT(LL *a,int n){ for (int i=1;i<n;i<<=1) for (int p1=i<<1,j=0;j<n;j+=p1) for (int k=0;k<i;k++) { LL x=a[j+k]; LL y=a[j+k+i]; a[j+k]=(x+y)%p;

2017-05-25 10:27:59 436

原创 HDU 5909 Tree Cutting (点分治+树形DP|FWT+树形DP)

题目描述传送门题目大意:给出一棵树,求异或和为[0..m-1]的非空连通子图的个数。题解1FWT+树形DP f[i][j]f[i][j]表示以i为根异或和为j的连通子树的个数(注意必须是i的子树中) f[x][jf[x][j^k]=f[x][jk]=f[x][j^k]+f[x][j]∗f[son][k]k]+f[x][j]*f[son][k] 这个转移方程的瓶颈在于f[x][j]∗f[son][

2017-05-25 10:15:39 1134

原创 HDU 1561 The more, The Better (树形DP)

题目描述传送门题目大意:在一个地图上,有N座城堡,每座城堡都有一定的宝物,攻克M座城堡使获得的宝物数量尽可能大,有些城堡不能直接攻克,要攻克这些城堡必须先攻克其他某一个特定的城堡。题解攻克关系形成的实际上是一片森林 我们将所有的树用0号节点连接,然后将m+1,正常做树形依赖DP就可以了。代码#include<iostream>#include<cstdio>#include<cstring>

2017-05-25 08:24:03 545

原创 HDU 1011 Starship Troopers (树形DP)

题目描述传送门题目大意:有n个洞组成一棵树,你有m个士兵,你从1号房间开始攻打,每个洞有a个”bugs”和b的价值。你的一个士兵可以打20个”bugs”,为了拿到这个洞的价值b你必须留下k个士兵消灭这个洞的所有”bugs”(k*20>=”bugs”的数量,且留下的士兵不可以再去攻打其他的洞,且必须攻打了前面的洞才可以攻打后面的洞)。问你花费这m个士兵可以得到的最大价值是多少。 题解题解刚开始直接按照

2017-05-25 08:10:29 453

原创 HDU 1171 Big Event in HDU (单调队列优化多重背包)

题目描述传送门题目大意:共n个物品,每个物品有一个大小和数量,将所有的物品分成两部分,是两部分的大小尽量平均题解看成是多重背包,背包的体积是sum/2,求能装下物品的最大大小和。然后就是用单调队列优化的问题了。正常的转移:f[i][j]=max(f[i][j−k∗v[i]]+k∗w[i],f[i][j])  0<=k<=c[i]f[i][j]=max(f[i][j-k*v[i]]+k*w[i],f[

2017-05-24 21:41:33 318

原创 bzoj 2645: Vijos1676 陶陶吃苹果 (树形DP)

题目描述传送门题目大意:一棵苹果树有n个节点,每个节点上有c[i]个苹果,这棵树高度为h。 剪掉一些枝条,使得修剪过后的树满足节点数-高度≤k,且保留尽可能多的苹果。题解如果一个点被保留,那么这个点到根路径上的点都会被保留。那么这就满足树形依赖问题。 解决树形依赖问题的常见做法就是将父节点的值给当前节点,然后用当前节点继续深层的计算。 f[son]=f[x]f[son]=f[x],然后用递归

2017-05-24 20:00:13 500

原创 SDOI2017 Round2 滚粗记

其实SD二轮已经过去快一个星期了,一直不知道该怎么开始这次游记,所以拖到现在。。。DAY0从学校坐车去济南,发现跟一轮没什么区别,就是人少了一半。 和ATP坐在一起搞事情,zyf2000不舒服所以自己走了。 到颐正大厦后,跟lx住在一起,lx开开心心的出去找同学玩去了,自己叫了一份焗饭就下去领密码条。有了第一次挑密码条的教训,这次决定直接站着等,不一会密码条就到手了,结果发现和Yveh连座。╮(

2017-05-24 10:25:32 1528

原创 bzoj 4069: [Apio2015]巴厘岛的雕塑 (DP)

题目描述传送门题目大意:将n个数分成若干段,求每段和按位或的最小值。段数限制在[A,B][A,B]题解这道题的后两个子任务需要分开做。 子任务1:1≤N≤100,1≤A≤B≤N,0≤Yi≤10000000001\le N\le100,1\le A\le B\le N,0\le Yi\le 1000000000 按位或的最小值,位运算的每一位是互不影响的,那么我们可以从高位到低位,依次考虑当前位是

2017-05-06 17:19:46 376

原创 bzoj 1237: [SCOI2008]配对 (贪心+DP)

题目描述传送门题目大意:你有n 个整数Ai和n 个整数Bi。你需要把它们配对,即每个Ai恰好对应一 个Bp[i]。要求所有配对的整数差的绝对值之和尽量小,但不允许两个相同的数配对题解这道题需要知道一个类似结论的东西:将A,B排序,每个位置与他配对的位置距离不会超过2. 具体的证明我也不会不过可以感性的理解一下。 假设没有不允许相同的数配对这个限制,那么最优的决策就是分别排序后相同位置的数配对。

2017-05-05 17:48:55 1018

原创 bzoj 3209: 花神的数论题 (数位DP)

题目描述传送门题目大意:设 sum(i) 表示 i 的二进制表示中 1 的个数。给出一个正整数 N ,求 sum(1)—sum(N) 的乘积。题解数位DP 将读进来的数进行二进制分解,然后从高位到低位开始DP。f[i][j][0/1]f[i][j][0/1]表到第i位一共填了j个1是否卡上界的方案数。 最后的答案就是∏if[n][i][0]+f[n][i][1]\prod i^{f[n][i]

2017-05-05 14:12:21 474

原创 Codeforces 805C (贪心)

题目描述传送门题解这道题貌似画个图就明白了 代码#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>using namespace std;int main(){ int n; scanf("%d",&n); if (n&1) printf("%d\n",n/2); el

2017-05-05 07:27:30 474

原创 bzoj 4545: DQS的trie (后缀自动机+LCT)

题目描述传送门题目大意: 给出一棵trie树 (1)询问当前trie的本质不同的子串数目是多少。 (2)以点rt为根向下长出一个子树,大小为si。 接下来si-1行,每行两个整数u,v和一个字符c,表示u号节点和v号节点之间有一条边,边上的字母为c。若长出子树之前当前树的大小是n,则这si-1点的编号分别为n+1,n+2…n+si-1。 (3)一个字符串S,询问字符串S在当前trie中的出

2017-05-04 21:39:47 597

原创 bzoj 3513: [MUTC2013]idiots (FFT)

题目描述传送门题目大意:给定n个长度分别为a_i的木棒,问随机选择3个木棒能够拼成三角形的概率。题解三角形的两边之和大于第三边。如果我们直接用这个计算实际上是不好计算的,因为上面的条件中两边必须是较小的两条边。 我们考虑他的补集。然后用总方案-不合法方案。所谓不合法方案就是两边之和小于第三边的。对于所有不合法的三角形,只可能有一种搭配不合法。 例如a+b<ca+b<c,那么一定不可能b+c<ab

2017-05-04 15:39:33 673

原创 bzoj 4445: [Scoi2015]小凸想跑步 (半平面交)

题目描述传送门题目大意:一个凸n边形,N个顶点按照逆时针从0~n-l编号。随机站在凸多边形内的某个位置,标记为 P点。将P点与n个顶点各连一条边,形成N个三角形。求P点,0号点,1号点形成的三角形的面 积是N个三角形中最小的一个的概率。题解nlogn半平面交。 主要就是化简出解析式,然后用半平面交求解不等式组。 可以用叉积表示三角形的面积,注意别叉反了,要么三角形的面积就是负的了。 设P(

2017-05-04 11:17:19 760

原创 bzoj 2765: [JLOI2010]铁人双项比赛 (计算几何)

题目描述传送门题目大意:铁人双项比赛由长跑和骑自行车组成。现在给定总赛程s,以及每个选手长跑和骑车的平均速度,请你求出对于某个指定的选手最有利的k和r。所谓最有利,是指选择了这个k和r后,该选手可以获得冠军,且领先第2名尽量地多。题解这道题刚开始的想法是解不等式组,然后得到一个k的范围,再确定最优解。 但是发现就算解出了范围,也不满足什么单调性。所以就考虑别的了。 对于每个选手其实,都可以用一条

2017-05-03 23:36:17 550

原创 bzoj 4864: [BeiJing 2017 Wc]神秘物质 (splay)

题目描述传送门题目大意:给出一个长度为n的序列 merge x e 将x,x+1合并,得到e insert x e 在x,x+1之间插入 e max x y 当前[x,y]中任意子区间中区间极差的最大值 min x y 当前[x,y]中任意子区间中区间极差的最小值题解这道题只要想清楚了min操作就是一个splay的裸题。 min中有贡献的子区间的长度只能是2,所以我们只要考虑相邻的两个数

2017-05-03 20:45:09 766

原创 bzoj 2432: [Noi2011]兔农 (数论+矩阵乘法)

题目描述传送门题目大意:f[1]=f[2]=1;i>2时,f[i]=f[i-1]+f[i-2], if(f[i] % k == 1) f[n]– 求f[n]%p。题解一道不错的矩阵乘法的题,感觉自己的数论知识完全跟不上啊。 斐波那契数列?一般都多少有一些规律或者循环节之类的吧。 我们以k=7为例,观察对7取模的Fibonacci数列 1,1,2,3,5,0,1,1,2,3,5,0, 5,

2017-05-03 19:24:54 972

原创 bzoj 1083: [SCOI2005]繁忙的都市 (最小生成树)

题目描述传送门题解最小生成树代码#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>#include<cmath>#define N 1000003using namespace std;int fa[N],n,m;struct data{ int u,v,c;}e[N];int cm

2017-05-03 14:09:10 710

原创 bzoj 2437: [Noi2011]兔兔与蛋蛋 (二分图博弈+dinic)

题目描述传送门题目大意:给出一个 n 行 m 列的棋盘,棋盘上有一 个格子是空的,其它的格子中都放置了一枚棋子,棋子或者是黑色,或者是白色。 每一局游戏总是兔兔先操作,之后双方轮流操作,具体操作为: 兔兔每次操作时,选择一枚与空格相邻的白色棋子,将它移进空格。 蛋蛋每次操作时,选择一枚与空格相邻的黑色棋子,将它移进空格。 第一个不能按照规则操作的人输掉游戏。题解二分图博弈 刚开始不觉的是二分图博弈

2017-05-03 11:12:30 489

空空如也

空空如也

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

TA关注的人

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