自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

穹妹的家

In solitude , where we are least alone.

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

原创 [莫队算法] WHU Problem 1605 - Distance on Tree

Problem 1605 - Distance on Tree 题意: 一棵树有N个节点,标号从0开始,再给一个常数k,0号点以外的任意节点i和i/k号点有一条边,边权是i。 每次询问qurey[l,r]qurey[l, r],要求输出ans=∑r−1i=l∑rj=i+1dis(i,j)ans=\sum_{i=l}^{r-1}\sum_{j=i+1}^rdis(i, j),其中dis(i,j)

2016-04-10 15:46:12 377

原创 [最大流+二分答案] LightOJ 1167 - Dangerous Tunnels

1167 - Dangerous Tunnels 题意:一个图有n+2个点,m条边,其中0点是源点,n+1是汇点,其余的点是休息站,边只能从编号小的点指向编号大的点。 要从源点到汇点选择k条路,一个休息站最多只能被一条路选择。 并且每条边有一个危险度,要求选择的所有边里,危险度的最大值尽可能小。 题解: 二分危险度,建图跑最大流看能不能选出k条路。 建图方法: 所有边需要保存容量和代价

2016-04-07 20:34:23 414

原创 [树链剖分] LightOJ 1162 - Min Max Roads

1162 - Min Max Roads 题意:给你一棵带权树,查询两点间最大值和最小值。 题解:建立树剖,然后就可以像序列一样查询了。好久没敲树剖板子了,手敲模板熟悉下。#include<bits/stdc++.h>using namespace std;const int N = 100005;const int inf = ~0u>>2;int root, n;struct eg

2016-04-07 10:59:49 513

原创 [概率DP] LightOJ 1151 - Snakes and Ladders

1151 - Snakes and Ladders 题意: 有100个格子,从1开始走,每次随机走1~6。有n个格子会单向传送到其他格子,tp[i]表示从i传送到tp[i]。 1和100不会有传送,一个格子也不会有两种传送。问走到100的期望值,注意不能走到100以外。 题解: 容易看出是个期望值DP,用DP[i]DP[i]表示从第ii个格子走出去需要走的次数,有两种情况。 1.1.第i

2016-04-05 16:07:57 1662 2

原创 [矩阵快速幂] LightOJ 1142 - Summing up Powers (II)

1142 - Summing up Powers (II) 题意:给定n×nn×n的矩阵AA和一个数kk,求下面的式子。 ∑i=1kAi=A1+A2+A3+...+Ak\sum_{i=1}^kA^i = A^1+A^{2}+A^{3}+...+A^{k} 题解: 令B=[AOAE]B= \left[ \begin{matrix}A&A\\O&E\end{matrix} \r

2016-04-04 17:03:00 800

原创 [矩阵快速幂] LightOJ 1132 - Summing up Powers

1132 - Summing up Powers 题意:给定N和KN和K,求下面的式子对2322^{32}取余的结果。(1<=N<=1e15,0<=K<=50 1 <= N <= 1e^{15}, 0 <= K <= 50) ∑i=1NiK=1k+2k+3k+...+Nk\sum_{i=1}^{N}i^K = 1^k+2^k+3^k+...+N^k 题解: 这个k次幂求和似乎有公式的,然而并

2016-04-04 16:59:51 777

原创 [线段树] LightOJ 1135 - Count the Multiples of 3

1135 - Count the Multiples of 3题意:维护一个序列,长度为n,初始值都为0。两种操作: (0 l r) 表示[l, r]这段所有数加1,(1 l r) 表示询问[l, r]这段有多少数是3的倍数。题解:使用带lazy的线段树维护。叶子节点维护在序列中的值,非叶子节点[l, r]维护lazy值,和3个数,分别表示mod 3 后余数为0,1,2的节点个数,那么被第

2016-04-03 20:08:32 422

原创 [枚举+二分] LightOJ 1127 - Funny Knapsack

1127 - Funny Knapsack题意:给n个物体,第i个物体的体积为v[i],还有一个容量w的背包,往背包里放东西,问体积不超过容量的放法有多少种,可以一个都不放。 (1 题解:看到n这题还纠正我一个误区,int最大是十位数2147483647,然后脑抽一直以为是1e10,所以1e9不用开longlong,成功wa了2发。#includeusing namespace

2016-04-03 11:31:28 480

原创 [dp+树状数组优化] LightOJ 1145 - Dice (I)

题意:给n个骰子,每个骰子有k个面,分别标上1~k,要求n个骰子和为s的方法数。其中1 题解:DP。令DP[i][j]表示前i个骰子和为j的方法数。DP[1][j] = 1 ( 1 DP[i][j] = SUM( DP[i-1][j-p] ) ( 1 = 1) 或者 DP[i+1][j+p] += DP[i][j] ( 1 很容易看出这是一个个n*k*s的DP,但是注意到前一种转移

2016-04-01 18:42:33 402

原创 [dp+树状数组优化] CF597C. Subsequences

题意:给定1~n的一种排列,求长度为k+1的上升子序列的个数。 (0 题解:DP。首先可以很容易的想到DP[i][j],表示以i为结尾长度为j的上升子序列的个数。也可以很容易的想到转移 DP[i][j] = sum(DP[k][j-1]) ( k 但是我们也可以很容易的发现,这个转移是O(n)的。由于是1~n的排列,而且n这样做之后如何转移呢?DP[i][j] = getsum

2016-03-27 11:33:44 636

原创 [容斥+lucas] LightOJ 1124 - Cricket Ranking

LightOJ 1124 - Cricket Ranking题意:有k个区间[l, r],从每个区间里取一个整数,问k个数和为n的方法数。题解:显然的,题目可以转化成从k个区间[0, r[i]-l[i]] (1可以理解成x1+x2+x3+...xn = s的非负整数解的个数,其中xi∈[0, v[i]]。A*表示我们需要求的多重集合,A*={v[1]*a1, v[2]*a2,

2016-03-26 19:11:31 698

原创 [堆+贪心] CF596C. Wilbur and Points

CF596C. Wilbur and Points题意:太难懂了。有一个平面点集,对集合中任意一点(x,y),满足以原点和(x,y)构成的矩形边上和内部的所有点也都在集合里。现在要给点标号,为了美观,当给(x,y)标号为i时,要求以(x,y)为左下角的矩形边上和内部所有点(如果在集合内)的标号都不小于i。然后还有一个条件,标号为i的点(x,y)必须满足 y-x == wi。

2016-03-24 20:49:26 355

原创 [DP] CF415D. Mashmokh and ACM

[DP] CF415D. Mashmokh and ACM题意:一个序列a1, a2, ...., an,如果满足ai%ai-1 == 0 ( 2 <= i <= n ),那么就叫做好序列。现在给定n和k,其中1<=a1<=a2<=....<=an <= n,求长度为k的好序列的个数,答案对1e9+7取模。题解:水DP,用dp[i][j]表示最后一项是i,长度为k的好序列的个数。

2016-03-24 19:17:28 723

原创 [BFS] CF653E. Bear and Forgotten Tree 2

E. Bear and Forgotten Tree 2题意:bear有一颗n个节点的树,现在他忘了这个树的结构,只知道有m条边不可能存在,还记得1号节点的出度是k,问可不可能存在这样一棵满足条件的树。题解:首先保证1号点的出度要大于等于 k,然后去掉1号节点,看其他点的连通性,求出连通块缩点,然后试着用1号节点去连接这些连通块,显然当连通块的数量大于k的时候就是无解。还有种情况就

2016-03-23 15:34:50 615

原创 [数位dp+二分] LightOJ 1105 - Fi Binary Number

题意:定义Fi-Binary Number,只含有0和1,不含前导0和连续的1。按字典序,前几个数为1,10,100,101,1000,1001。求第n个FBnumber。题解:通过数位dp可以快速求出0~n中有多少个FBnumber,然后二分求出最小的n就行了。#include#define ll long long intusing namespace std;const ll

2016-03-19 20:30:27 460

原创 [容斥] LightOJ 1117 - Helping Cicada

题意:给个正整数n,然后给m个整数,求1~n有多少个数不能被这m个数中任意一个整除。(1 思路:裸容斥,考虑1个数k,1~n有[n/k]个数能被k整除,[a]表示a向下取整,所以ans= n-SIGMA([n/num[i]])(1#include#define ll long long intusing namespace std;ll num[16];int f[2] = {1,

2016-03-19 20:13:02 725

原创 [数位DP] hihoCoder#1033 交错和

hihoCoder#1033描述给定一个数 x,设它十进制展从高位到低位上的数位依次是 a0, a1, ..., an - 1,定义交错和函数:f(x) = a0 - a1 + a2 - ... + ( - 1)n - 1an - 1例如:f(3214567) = 3 - 2 + 1 - 4 + 5 - 6 + 7 = 4给定 

2016-03-05 19:59:22 612 3

原创 [AC自动机+数位DP] ZOJ3494 BCD Code

ZOJ3494题意:先理解BCD编码,不是普通的二进制,设一个n位的整数x= An*10^n-1 + An-1*10^n-2 +...+ A1*10^0,那么x的BCD编码为An的二进制拼接上An-1的二进制拼接上An-2...直到A1。 所以 127的BCD编码为 0001 0010 0111。一个n位的整数,其BCD编码有n*4位。然后题目有一个只包含01串的集合S,要求[A, B]范

2016-03-05 17:23:53 668

原创 [数位DP] HDU4734 F(x)

HDU4734题意:设整数x的十进制表示为An*10^n-1 + An-1*10^n-2 ... A1*10^0, 定义函数F(x)=An*2^n-1 + An-1*2^n-2 +...+A1*10^0,然后对任意x∈[0, B]求F(x)值不超过F(A)的x的个数。解法:数位DP。 DP[i][j]表示1~i位的数中F函数值不超过j的数的个数,DP[len][F(A)]即为答案。技巧

2016-03-05 16:45:53 370

原创 [基础数位DP] HDU2089 不要62 HDU3555 Bomb

做了这题数位DP就入门了。记忆搜索的写法非常简单,已加入模板。#includeusing namespace std;int dp[15][2];int num[15];int dfs(int pos, int st, int f){ // st值 0表示不含4且不以6结尾 1表示不含4且以6结尾 2表示含有了4或者62,转移时其实直接舍去了,无需关注 if(pos < 1

2016-03-05 16:10:40 409

原创 [树链剖分+MST] LightOJ 1101 - A Secret Mission

这个题一开始想了很久dijkstra,以为是某种应用或者可以快速更新,然而并没有什么结果。后来就想暴力吧,想优化,于是先按边权值排序,然后加边,如果边两点已经连通了,那么就肯定没必要加这条边了,然后发现这不是kruskal吗?然后就变成一棵树了,然后就变成查询树上两点最大值了,然后就变成树链剖分了...然后就AC了...代码几乎和上篇一样...#includeusing namespac

2015-12-31 21:19:54 789

原创 [树链剖分+MST] CF609E. Minimum spanning tree for each edge

题目链接:Minimum spanning tree for each edge题意:给一个无向图,n个点,m条边,对任意边edge[i],求出包含有边edge[i]的最小生成树。做法:考虑MST的性质,对任意两点u,v一定有且只有一条路径,当边[u,v]不是MST边的时候,加入边[u,v]便会形成环,于是在u到v的路径上找一条权值最大的边删去再加入边[u,v],之前环上的任意两点仍然连通

2015-12-20 19:10:53 1794

原创 [树链剖分] CF593D. Happy Tree Party

题目链接:D. Happy Tree Party树链剖分是从下面两篇博客学的。思想从这里看的(不能再清晰了):http://blog.anudeep2011.com/heavy-light-decomposition/代码从这列看的(区间操作的非LCA思想太赞了):http://blog.sina.com.cn/s/blog_6974c8b20100zc61.html然后是

2015-11-28 17:04:08 580

原创 [函数式线段树] POJ1442 Black Box

这两天看了看可持久化数据结构那篇paper,看看大牛的博客,自己想了想,感觉对函数式线段树有点领悟了。虽然对我来说很难理解,也还是在慢慢理解。但还是不太懂可持久化思想,也不太清楚函数式具体指什么,留给之后的我再考虑吧。具体来看这题,我用的是函数式线段树,似乎也称为主席树。做法是这样的,建立n棵线段树,每棵线段树维护的区间都是[1,sz],其中sz是序列a[1],a[2]...a[n

2015-11-23 20:24:53 602

原创 [Splay] POJ3468 A Simple Problem with Integers

一道经典的线段树题目,被我拿来SPLAY练手了,。熟悉下区间求和,lazy区间更新。SPLAY的旋转操作真心太强了,从AVL学习了旋转之后迫不及待地学习了SPLAY。SPLAY原本也是二叉树,我们对SPLAY的层次结构并不关注,只需要注意到任意旋转操作不会改变中序遍历,于是就可以用来维护数列了。有个技巧就是预先插入两个无关节点,ROOT和ROOT->right_kid。之后把要操作

2015-11-23 17:40:13 400

原创 [差分约束] HDU1384 Intervals

差分约束第一题,赶快学了下,这题算是入门题吧,对差分约束有了一点主观印象。对于这题,没看差分约束的知识还是很难想到的,居然能和最长路联系起来,太玄妙了。题意:先输入一个n,然后是n行,一行三个数表示一个范围[ai, bi]和ci,要求一个数集Z,要求Z和[ai, bi]至少有ci个公共数。这题如何构造成差分约束系统呢?差分约束系统有个特点,要包含减法。于是可以利用区间的减法,设d[

2015-06-11 08:57:56 402

原创 [费用流] POJ 2195 Going Home

题目链接:http://poj.org/problem?id=2195题意:地图上有相同数量的人和房屋,让所有人回到不同的房屋里,总的路程最小,路程定义为哈密顿距离。昨天开始看了一下费用流,思想和最大流差不多,只是找增广路的时候找最小花费的路径来增广。用最好理解的EK算法来看,EK中的BFS过程就是在找增广路,如果把这个过程变成找一条最花费小的增广路就可以了。关于增广路的理

2015-06-07 16:46:25 459

原创 [构造]CF550E Brackets in Implications

题目链接:http://codeforces.com/problemset/problem/550/E题意:定义一种逻辑运算符“->”,左到右结合,真值表如下。0 -> 0 = 10 -> 1 = 11 -> 0 = 01 -> 1 = 1给一个n,再输入长度为n的01串,求一种加括号的方法让最后值为0,可以就输出YES和加括号的方法,输出格式如样例,否则输出NO。多解任意

2015-06-05 16:00:34 675

原创 [堆] HDU4006 The kth great number

看标题以为是区间第K大,准备去水一发,结果是整体第K大,由于没有删除操作,维护一个小根堆就行了,保持top是第k大,比top小的加入堆对top没有影响,也永远用不上,比top大的加入就更新top,保持堆有k个元素就行了。数据结构没什么可以说的,主要是学习了STL的用法,用vector自带的堆函数,用优先队列,其实优先队列本身就是堆实现的。不过还是不会手写堆,STL大法好。下面是vect

2015-06-03 22:00:00 477

原创 [最大流] POJ1087 ZOJ1157 A Plug for UNIX

看了几天最大流,还是最喜欢Dinic,比较清晰,下午写了一般预流推进,结构也比较简单,网络流算法真是多。自己写的第一道网络流,WA了不知道多少次,果然是建图错了,算法没写错,果然网络流建完图就AC一半。刚开始建图的时候一直把设备的名字无视掉了,以为没用,其实不然。因为一个设备显然只能插一个插头,所以用设备来连接汇点,中间的各种边不管是INF还是其他的都要受到最后设备的容量(1)约束,这样才

2015-06-03 20:48:53 490

原创 [SPFA+路径输出] ZOJ3088 Easter Holidays

题目链接:Easter Holidays题意:n个点m+k条边,任意s,e两点通过m边集的最大距离为MAX,通过k边集的最小距离是MIN,要求MAX比上MIN的最大值,还要输出从k中e到s,从m中s到e的路径。做这题的时候真是心中万只草泥马奔腾。要求任意点的最短路最长路,一般来说用Floyd(O(n^3)),然而这题范围用N^3复杂度高达10^9,显然不行。但是注意到边数只有10^

2015-06-02 12:35:22 685

原创 [二分答案]HDU4004 The Frog's Games

也不知道怎么回事,这几天遇到好几道二分答案的题,百度之星也有一道二分水题,于是趁此机会再搞了一下二分。之前写二分都很纠结,不知道二分结束后指向的值是比目标大一个还是小一个,总之特判特判,搞的代码臭长。。在数列里面二分都用STL的二分函数搞,然后二分答案的就手写,是r-1还是l+1似乎很有讲究啊,可惜我还没研究透彻。这题没啥可以说的,就一个二分答案的水题,不过注意R范围,还有记得排序,总

2015-06-01 15:34:16 661

原创 [离散+二分]HDU4400 Mines

题意:给n个平面上的炸弹,每个炸弹有一个爆炸范围d,爆炸的时候会引爆d范围内的炸弹(注意距离为曼哈顿距离),这些炸弹可以又炸其他炸弹。然后m次询问,每次引爆编号num的炸弹,输出爆炸的次数,如果已经炸过了就输出0。因为是平面点,我用了以y升序的mulitset,内部是有序的,就不用再去排序了,而且自带上下二分函数。STL大法好啊。离散的过程是,x相同的就压入同一个Mset,不同的以x的升序

2015-05-27 14:01:16 737

原创 [线段树]HDU4893 Wow! Such Sequence!

题意:一个序列n个数初始为0,m次操作。操作1,把第k个加上d;操作2,对l到r的结点求和;操作3,把l到r的结点变成最近的斐波那契数,如果到左右的斐波数相同就选小的那个。这题真是坑了好久了啊。第一次用的树状数组做,因为是单点增减区间求和,而变成斐波那契数的操作显然必须对叶子结点操作,然后更新上去,超时果断的。其实如果一段区间之前做了3操作,而之后这个区间没有做过1操作,再做3操作是可

2015-05-26 10:29:20 521

原创 [逆向拓扑排序]POJ3687 Labeling Balls

看了几页书上的网络流感觉不想看了,找了前面几章的题目打算水一水练手,结果碰上这个题也是很囧。一开始做是正向,从轻到重建边,记录入度,搞优先队列让小序号的先出队,同时搞一个普通队列把每次选的入度为0的点记录下来,结果一发WA。后来仔细看了看题目,结果要输出的是结点的标号。比如最开始第一个选的入度为0的点是5,那么我的第一个答案就是5了,其实题目不是这个意思,第一个答案应该是1第几个被选出

2015-05-25 17:10:14 694

原创 [漂浮法]POJ2528 Mayor's posters

当初这题用线段树搞爆,离散化然后建树搞搞搞,辛苦AC。其实这题用漂浮有奇效,不用离散,而且是线段,覆盖写起来简单。想法很简单,贴在下面的海报就放在下面,然后从下网上浮,遇到其他的海报就断成一截或两截继续上浮。还有个问题,这题的坐标表示的不是端点,而是一小段。比如有两张海报,1 3和4 6,那么其实1到6都是被覆盖了的。所以截断海报的时候加减一处理边界。用DFS实现。

2015-05-21 14:14:41 712

原创 [漂浮法]CSU1589 Shaping Regions

漂浮法主要用于解决一类矩形线段覆盖问题,比如求覆盖后的面积,可见数量等,可以水过一些扫描线题,而且比较好写。原理类比把矩形按照顺序从底到顶的放进水里,然后让下面的依次上浮,过程中如果被其他矩形挡住就分裂成几个矩形继续上浮,最后到顶的就是这个矩形最后可以看见的部分。过程用DFS实现。具体看代码。最坏复杂度O(n^2),但是常数小,配合2个剪枝,在OJ跑8ms,和扫描线时间差不多,

2015-05-21 13:17:01 589

空空如也

空空如也

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

TA关注的人

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