自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Rain

I have a dream!An AC deram!! orz orz orz orz

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

原创 HDU 4424Conquer a New Region(并查集)

题意:给出一个树形图和边权值,边权值是容量,问把某个点作为首都,向其他n-1个点运输货物,货物容量不超过路径上的边权值;问可以输出的最大货物是多少?思路:因为限制条件是路径上的最小值,那么我们按价值排序,从大到小排,就可以避免这个问题了,然后利用并查集来完成,对于两个集合,左集合的价值总和为A,右集合的价值总和为B,现在有一条路径连接这两个集合,那么我们考虑的是将A合并到B还是

2017-09-30 14:13:27 332

原创 HDU4810 Wall Painting(组合数学+二进制)

题目大意:有以为画家,有n种颜料,给出n种颜料的值。然后在1~n天中,他每天都会选择相应天数的颜料数进行混合,形成新的一种颜料。比如说第2天,他会选择任意两种的颜料混合,得到新的一种颜料(所选的颜料的值全部取亦或后的到的数即为新颜料的值)然后对应输出每一天有可能合成颜料值的总和。思路:     首先把所有的数都拆成二进制,然后把他们在某一位上的数字加起来,比如      

2017-09-30 14:10:36 551

原创 BZOJ3670【NOI2014】动物园(KMP变形)

3670: [Noi2014]动物园Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2990  Solved: 1621[Submit][Status][Discuss]Description近日,园长发现动物园中好吃懒做的动物越来越多了。例如企鹅,只会卖萌向游客要吃的。为了整治动物园的不良风气,让动物们凭自己的真才实学向

2017-09-28 16:23:32 709

原创 Codeforces 383C Propagating tree(树状数组)

题目大意:有一棵树,对这个树有两种操作:1:表示为(1 x val),在编号为x的节点上加上val,然后给x节点的每个儿子加上- val,再给每个儿子的儿子加上-(- val),一直加到没有儿子为止。2:表示为(2 x)查询x节点上的值。思路:首先通过dfs将树抽象成树状数组,然后以和根节点的层数关系作为d,开两个树状数组分别计算添加值和减少值。

2017-09-28 14:45:58 350

原创 HDU4778Gems Fight!(状态压缩DP)

题目大意:有B个盒子里面放有G种颜色的宝石,两个人轮流选一个盒子将其中的宝石取出来放到一个锅里,然后其中没有S个相同颜色的宝石,它们就会聚合在一起变成一个魔法石(可能产生多个魔法石且锅里有可能有剩余的宝石),然后本轮的得分就是产生的魔法石的数量,且如果本轮某个人拿到了魔法石的话,那么下一轮他还可以继续选择盒子放入宝石,知道他在某一轮没有拿到魔法石,现在问两个人都采用最优策略的情况下,到最后

2017-09-28 11:30:27 256

原创 HDU5556 Land of Farms(最大独立集)

题目大意:一个N*M的矩阵,其中“.”代表空地,“0-9”代表古代建筑,我们如果选择了一个编号的古代建筑想要建立,那么对应就要将全部该编号的建筑建立起来,如果在空地上建筑,只建立当前点。问最多能够建立多少种建筑,并且每两种建筑之间没有公共边。题目意识比较难懂,我们来分析一下第一组样例:[cpp] view plain copy

2017-09-28 11:26:57 594

原创 Codeforces601D Acyclic Organic Compounds(dfs+字典树合并)

给一颗n(1 ≤ n ≤ 300 000)个节点的树,root=1,每个节点上有一个字母,每个子树从根开始向下遍历到任意节点停下,经过的不同字符串个数为diff[i], 已知ci,求max(diffi+ci)与符合条件的i的个数求出diffi就行 考虑给每个子树建一颗字典树,然后不断合并字典树 然后优先让节点数大的向小的合并#includeusing na

2017-09-25 15:12:05 329

原创 HDU3037Saving Beans(lucas定理模板)

题目相当于求n个数的和不超过m的方案数。如果和恰好等于m,那么就等价于方程x1+x2+...+xn = m的解的个数,利用插板法可以得到方案数为:(m+1)*(m+2)...(m+n-1)  = C(m+n-1,n-1) = C(m+n-1,m)现在就需要求不大于m的,相当于对i = 0,1...,m对C(n+i-1,i)求和,根据公式C(n,k) = C(n-1,k)+C

2017-09-25 15:06:46 327

原创 HDU5861Road(线段树)

题意:有n 个村庄在一条公路上,每两个村庄之间的路有使用和不使用两种状态,使用时,每天需耗费wi 元,每段路初始时都是不使用的,在m 天中,我们总共可以打开一次、关闭一次,从第一天到第m 天,每一天给出ai、bi,表示ai 到bi 之间的路必须是通的,问每一天n-1段路的总耗费最小为多少。思路:  每段路只能打开一次,关闭一次,我们可以求出第i 段路最早什么时候使用

2017-09-22 11:33:58 295

原创 HDU3974Assign the task(DFS序+线段树)

/*translation: 一个公司里面每个员工都有一个顶头上司,一旦给某个员工分配任务后,这个员工以及该员工的所有下属都在做该任务。 有若干操作,分配给员工任务以及查询该员工正在执行的任务。solution: 线段树,时间戳一般化 很明显该公司的所有员工间的关系可以用一颗多叉树来表示。然后就是dfs给这棵树打上时间戳。根据新分配的id号码 将其节点对

2017-09-22 11:27:58 286

原创 51nod1215数组的宽度(单调栈)

1215 数组的宽度题目来源: Javaman基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题N个整数组成的数组,定义子数组a[i]..a[j]的宽度为:max(a[i]..a[j]) - min(a[i]..a[j]),求所有子数组的宽度和。Input第1行:1个数N,表示数组的长度。(

2017-09-22 11:23:29 368

原创 HDU5863cjj's string game(DP+矩阵快速幂)

题意:让你用k个字母构造出两个长度为n的a,b串,其中a,b连续对应子串的长度不能超过m,问方案数。分析:dp[i][j]表示现在构造了i长度,长度j后缀连续对应相等,那么dp[i][j] = dp[i-1][j-1]*k,特别地,dp[i][0] = sigma(dp[i-1][j]*(k-1)*k) (0=令sum=dp[n][0]+dp[n][1]…+dp[n

2017-09-08 13:05:39 362

原创 POJ3252Round Numbers(数位DP)

题意:算出区间内二进制中0的个数大于等于1的个数的数字有多少个#include#include#include#includeusing namespace std;#define N 50int dp[N][N][N], bit[N];int dfs(int pos, int num0, int num1, bool pre, bool limit)

2017-09-06 20:07:03 304

原创 CodeForces548D-Mike and Feet(单调栈)

题意:n个数,现将这n个数中取出每连续的k个(k 从1~n)组成一组,组内的值为这一组的最小值,现在要求所有大小为k的组的最大值。思路:单调栈。维护一个单调递增栈(从栈底到栈顶单调递增),存每个点贡献的长度和他的值。 比如1 2 3 4 5 4 3 2 1 6 第一个1,栈为空,那么把它加入栈中,贡献的长度为1,值为1。 依次直到第6

2017-09-04 16:49:29 1614

原创 BZOJTree Rotations(线段树的合并)

题目链接2212:[Poi2011]Tree Rotations题意:给定一颗完全二叉树,每个叶子节点有一个权值,你可以任意交换每个点的左右儿子,使得最后整棵树中序遍历的逆序对个数最少搬运题解系列:考虑一个节点的左右子树的子树是否交换过对这个节点的逆序对数目没有影响,只有这个节点直接的子树交换才会产生影响那么我们可以分治的去计算每个节点的贡献,然后向

2017-09-03 18:05:27 392

原创 UVA10385 - Duathlon(三分)

题目:有一个比赛分成跑步和骑车两部分,总长度一定(L),最后的参赛者贿赂了裁判,裁判会调节两部分的比例,他想要求超过第二名的最大值。#include #include #include using namespace std;const int N = 25;double t, v1[N], v2[N];int n;double cal(double

2017-09-03 16:50:59 510

原创 HDU5876Sparse Graph(补图最短路)

题意:给出一个图,和一个起点,求在该图的补图中从起点到其他N-1个点的最短距离。如果不连通输出-1.分析:利用原图求补图上的最短路,bfs遍历,U到 与U的不邻接的点的边即为补图的一条边,可以直接计算出 到这些不邻接的点距离,dis[v']=dis[u]+1;然后将这些不邻接的点加入队列,继续寻找,用两个集合,,一个记录不邻接的点,一个记录没有用过的点#incl

2017-09-03 16:48:33 425

原创 HDU5784How Many Triangles(几何+极角排序)

题意:平面上n个点,问能组成多少个锐角三角形分析:统计锐角的个数,设为 A,钝角和直角的个数,设为 B 每个锐角三角形有三个锐角,每个钝角和直角三角形均贡献两个锐角 所以答案即为 A−2B3 然后题解在对每个点极角排序之后,采用 two pointers的方式来找上下界 比二分好写多了,也很方便,时间复杂度 O(N2logN)

2017-09-03 16:41:19 770

原创 HDU5478Can you find it(快速幂)

题意:给你C,k1,k2,b1,按字典序输出满足的所有(a,b)对解题思路:因为对于任意n均满足,故n=1的情况也是符合的,故可得①而n=2的情况也是符合的,可得②因为①式mod C = 0 ,所以①式乘以一个数mod C 仍为0,不妨①式*,可得所以,我们只需遍历一遍a的取值(1~C-1),利用快速幂计算出,以及,再根据式①可以

2017-09-03 16:24:20 483

原创 HDU6191Query on A Tree(字典树启发式合并)

题意:有一棵n个节点的有根树,每个节点都有一个值,m次查询,每次两个数x y表示以x为根的子树中哪个节点权值异或y得出的结果最大,求最大结果思路:离线和线段树合并一样,在搜索过程中将多个字典树并在一起每次查询遍历以当前子树的根为根的字典树#includeusing namespace std;#define N 100005templa

2017-09-01 17:04:18 908

原创 Codeforce#430D.Vitya and Strange Lesson(01Trie)

题意:每次询问一个x,问数组中的数与x异或后,不存在的最小的数。分析:01字典树上贪心选择一下,选择的时候判断左孩子和右孩子满不满。每次询问的亦或值x只要一直累⊕就行#includeusing namespace std;#define N 300005#define H 19bool vis[N];struct node{ node *nxt[2];

2017-09-01 12:33:26 303

原创 HDU5738 Eureka(计数)

题意:统计平面内有多少个点共线,有重点思路:显然没有重点的时候是个水题,这里统计共线我是用了斜率存进map里面,由于直接除会是double很容易挂,所以直接map,int>这样来处理就可以解决了,然后算一下重点的贡献和不重点的贡献就可以了#includeusing namespace std;#define pii pair#define LL long long#de

2017-09-01 12:26:27 298

原创 HDU5773 The All-purpose Zero(LIS变形)

题意:可以将0替换成任意interger(包括负数),在此基础上求最长递增子序列。思路:将所有的0全部提取出来,求出此时序列的LIS(不含0的),这是针对0在子序列的外面的情况,如0,1,2,3,0.那么如果0在子序列中间怎么办?很简单,把读入的非0的数的值减去这个数前面0的个数即可,如1,2,0,3,4。在提取出0后序列其实为1,2

2017-09-01 12:19:28 288

空空如也

空空如也

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

TA关注的人

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