hduoj
文章平均质量分 80
cscoder
这个作者很懒,什么都没留下…
展开
-
hdu 3234 Exclusive-OR
Exclusive-OR并查集的好题这里由于每次给定的是xi, xj的关系,并且可以会给定xi的值,所以我们需要3个数组来存储每个值的信息:v[i]表示i的值,p[i]表示i的父亲节点,d[i]表示v[i] ^ v[p[i]] 的值。 首先是并查集的查询操作。这里我们不仅需要压缩路径,更新x与根节点的关系,这里可以由抑或操作的传递性直接计算出来,同时如果已知x或者已知树根的值时,我们原创 2013-01-14 23:35:14 · 676 阅读 · 0 评论 -
hdu 4301 Divide Chocolate
Divide ChocolateDP状态:dp[i][j][1]表示前i个分成j部分并且最后一行被分在不同的部分中的个数,dp[i][j][0]表示前i个分成j部分并且最后一行被分在相同的部分中的个数可以先预处理出1000内所有的,然后只需要查询即可。/* author : csuchenan prog : hdu4301 algorit原创 2012-10-19 23:07:06 · 664 阅读 · 0 评论 -
hdu 2242 考研路茫茫——空调教室
考研路茫茫——空调教室非常好的一个题。这个题目与hdu 3298很相似,都是求分成两个连通块之后,差值最小。不过这个题目的难点在于给的不是一棵树,而是一个图有回路存在。由于只能切断一条边,所以这条边对于这个图来说,一定是割边。那么问题就变得容易的多了,枚举每条割边,算出割边去除后两个连通分量的权值和之差。如何快速计算出每个连通块的权值和。我们可以在找割边的时候,就算出每个点的子节点的权原创 2012-10-19 13:17:44 · 1498 阅读 · 0 评论 -
HDU 1011 Starship Troopers
Starship Troopers树形DP+分组背包,根节点一定需要被攻占。dp[i][j] : 在i节点派j个机器人,能获得的最大概率。先不考虑根节点dp[i][j] = max{dp[i][j] , dp[i][j-k] + dp[u][k]} ,然后考虑i点也需要派兵攻占。。在判断一下就可了。具体参看程序/* * author : csuchenan原创 2012-10-19 12:05:27 · 401 阅读 · 0 评论 -
hdu 1423 Greatest Common Increasing Subsequence
Greatest Common Increasing Subsequencehdu 1423 GCIS (n^2)省赛的时候,这个题目看了良久,都没想到O(n^2)的算法。后来苏犇看到GCIS的时候就让看模版,然后在吉大的模版上看到了这个然后我们就顺利的1Y.我又看了一下这个题目,找了好多博客(不是挂了,就是讲的很不清楚)。。然后看到了http://www.tyvj.cn/bb原创 2012-10-14 22:40:58 · 446 阅读 · 0 评论 -
HDU 4405 Aeroplane chess
Aeroplane chess今年的网络赛题目。那个时候还没写过期望概率DP的题目。之前苏牛说让我做一下期望概率DP的专题,但是没做,结果就出了一道期望DP的题目。后悔啊。。。最近学了一下期望DP,然后做到了这一题。现在发现这题真的是很水。方程很容易写出来。dp[i] = sum(dp[i+j]) + 1 , 1=/* author : csuchenan PRO原创 2012-10-05 16:22:50 · 448 阅读 · 0 评论 -
hdu 3627 Giant For
Giant For线段树+离散化。离线处理,由于查询的时候我们需要找到所有满足条件的结果中行最小且列最小的。我们以行建树,然后将行对应的列中的值有set保存下来。首先将数据读入,然后将行从大到小进行排序,维护一个区间中的列最大的值。添加与删除操作很相似,一个是相当于将点的标记为1,另一个就是将标记置为0,所以只需要1个update函数就可以了。然后查询的时候很简单,我们只需要找到行最小的,并且原创 2012-10-03 23:53:39 · 515 阅读 · 0 评论 -
博弈论初级入门题目
详细资料参见博弈论入门hdu 1846 巴什博弈,只要n%(m + 1)==0肯定输。#include int main(){ int T ; int n ; int m ; //freopen("hdu1846.in" ,"r" , stdin) ; scanf("%d" , &T) ; for( ; T-- ; ){ s原创 2012-09-10 22:56:20 · 719 阅读 · 0 评论 -
hdu 4123 Bob’s Race 树形DP + 单调队列
Bob’s Race在昨天的模拟赛中,有一种情况没想明白,就没怎么写了。今天又想了一下,其实和hdu4008很像。然后重新写了一遍就AC了,看来树形DP的题目还得好好写写。说一下思路:分为求每个点出发的最长路和求最长区间两个阶段。关于求最长区间的可以直接采用单调队列,hdu3530便是一个求最长区间的问题。主要说一下求每个点的出发的最长路。求最长路:两个DFS. 第一次DFS,我们原创 2012-09-02 18:25:16 · 1061 阅读 · 0 评论 -
HDU 4276 The Ghost Blows Light
The Ghost Blows Light也是树形DP里非常不错的一道题。由于要从1走到N,我们可以先将从1到N的最短路给直接处理出来。然后由于我们可以在这条路上的一个节点走一个回路,已得到更大的价值。所以我们可以再对每个点进行一个分组背包。dp1[i][j]表示从i点出发回到i点用时j所能得到的最大价值。然后在进行一次分组背包dp2[i][j] i是关键路径上的点,表示从1走到i点用时j所能原创 2012-10-19 13:29:27 · 508 阅读 · 0 评论 -
hdu 4331 Image Recognition
Image Recognition先处理出每个位置,前后左右四个方向的连续的1的个数。。由于正方形的对角顶点一定在对角线上,所以直接暴力枚举。#include #include const int maxn = 1005;int l[maxn][maxn];int r[maxn][maxn];int u[maxn][maxn];int d[maxn][maxn];原创 2012-10-19 19:33:54 · 576 阅读 · 0 评论 -
HDU 4305 Lightning
Lightning建无向图。如果两个点之间的距离小于R,并且两点之间无第三点可以用向量判断时间复杂度O(n^3).然后求生成树的个数。这里直接用Martix Tree定理。对于无向图G,它的kirchhoff矩阵C定义为它的度数矩阵D减去它的邻接矩阵A.然后用martix_Tree定理:对于一个无向图G,它的生成树个数等于kirchhoff矩阵任何一个n-1阶主子式的行列式的绝对值。关原创 2012-10-21 12:50:46 · 647 阅读 · 0 评论 -
hdu 3068 and ural 1297
两道回文串的题目,关于回文串的题目有很多种解法。以前写回文串的题目都是采用后缀数组写的,今天无意中搜到了Manacher算法,就学了一下。发现Manacher算法真心简洁,复杂度低编程量低。后缀数组写起来得100来行的题目,Manacher写起来不到30行,无限ORZ。。。关于Manacher算法:http://wenku.baidu.com/view/3031d2d3360cba1aa811da原创 2013-01-22 22:18:57 · 531 阅读 · 0 评论 -
HDU 4320 Arcane Numbers 1
Arcane Numbers 1题意:给出A,B(/* author : csuchenan prog : hdu 4320 algorithm: 整数分解*/#include #include #include using std::vector;typedef long long LL;vector pr;// 用于存放素数原创 2012-10-19 11:47:39 · 361 阅读 · 0 评论 -
Hdu 4303 Hourai Jeweled
Hourai Jeweled官方题解:从任意一点开始深搜,每颗子树搜索完毕之后向上返回pair每次深搜完一个子节点之后,增加的过这一点的gorgeous边的总分数为: 之前深搜的所有子节点向上返回的边数之和 * 当前子节点返回的分数 + 之前深搜的所有子节点向上返回的分数之和 * 当前子节点返回的边数 + 之前深搜的所有子节点向上返回的边数之和 *原创 2012-10-25 23:59:46 · 579 阅读 · 0 评论 -
hdu 2825 Wireless Password
Wireless PasswordAC 自动机+ DP题目意思:给定M个子串,现需要构造一个长度为N的串使得该串中至少包含K个子串,求有多少中构造方法。开始的时候错误的理解题目意思:认为只需要包含k个字串(允许重复)。。。现在状态就很容易写了。dp[i][j][k] 长度为i处于j状态的包含的字串的情况为k的可能串的个数, 方程就可以直接得到了,这里就不写了,参看程序。。原创 2012-11-01 13:55:57 · 534 阅读 · 0 评论 -
hdu 3715 Go Deeper
Go Deeper2 - sat建图:x[a[i]] = 1, x[a[i] + n] = 0c[i] == 0 a[i] + n --> b[i] b[i] + n --> a[i]c[i] == 1 a[i] + n --> b[i] + n b[i] + n --> a[i] + n a[i] ---> b[i]原创 2012-10-22 22:59:48 · 547 阅读 · 0 评论 -
HDU 3853 LOOPS
LOOPS期望DP。题目意思很容易理解,这里就不再解释了。方程dp[i][j]表示从i,j点出发到达(R , C)的消耗能量的期望值。题目给了状态转移的几个方向,dp[i][j] = x1 * dp[i][j] + x2 * dp[i][j + 1] + x3 * dp[i + 1][j] + 2 ; 这里x1,x2,x3即为从(i,j)走到(i,j),(i , j + 1) , (i原创 2012-10-04 22:53:55 · 395 阅读 · 0 评论 -
hdu 3622 Bomb Game
Bomb Game很裸的2-sat。二分枚举半径,然后对于每个点i枚举j,其中j不是i'.如果dist(i,j)小于半径,那么就连边i->j', j->i',然后判断是否出现冲突。由于用double的话会出现精度误差,而给定点的坐标都是整数.所以,我们可以将其转化为整型处理,不进行开方操作,而比较的时候也是枚举两点间的距离。最后输出答案的时候在开方就行了。/*原创 2012-10-20 22:51:08 · 432 阅读 · 0 评论 -
HDU 4302 Holedox Eating
Holedox Eatinghdu 4302有一个[0,l]区间,有一只毛毛虫,初始位置在0,现在又两种操作操作0 x 代表在x点放一块蛋糕,操作1代表毛毛虫要吃一块蛋糕:如果有蛋糕,那么毛毛虫将走到距离其最近的位置吃一块蛋糕。如果在其两边有两个距离其等距的蛋糕,那么毛毛虫将沿上次走的方向移动。如果没有蛋糕那么毛毛虫将待在原位置不动。现在给定M个操作,问毛毛虫的移动距离。做法:1.原创 2012-10-20 17:17:17 · 541 阅读 · 0 评论 -
hdu 4008 Parent and son
Parent and son树形DP题目。题目意思很简单,给定一个无根树,然后给定Q个查询x , y 查询以x为该无根树的根节点,然后查询y的最小儿子,以及中最小子孙。思路:首先我们规定树的根为1,然后进行一次dfs,求解出每个节点x的儿子节点中最小的和次小的,子孙节点中最小的,同时求出x的所有子节点保存的最小子孙节点中的次小子孙节点,以及每个节点x的父亲节点。数组含义如下原创 2012-08-27 21:45:00 · 1215 阅读 · 0 评论 -
hdu 1512 Monkey King and ZOJ 2334
Monkey King很裸的左偏树题目。直接应用就可以了。/*author : 中南大学 陈安PROG : hdu 1512data structure: 左偏树操作:采用最大左偏树,所以每群猴子中权值最大的一定在树根1.查询每群猴子中权值最大的,采用并查集,否则容易爆栈2.对于修改操作,可以分解为如下步骤:a.删除树根,合并左右子树,原创 2012-08-31 16:51:51 · 773 阅读 · 0 评论 -
Hduoj 2296 Ring
RingAC自动机+DP。方程很容易写出来,但是对于串的处理确实比较麻烦的。首先方程:dp[i][j] = max{ dp[i-1][k] + tag[j] },这里tag[j]表示到达j状态时所有的匹配得到的数目之和。在递推的时候我们需要注意如果一个状态没有被经过(或者说是没有到达),那么是不能用这个状态来递推到下一个状态的。所以在写的时候有长度为i的到长度为i+1的会更容易写。然后原创 2012-08-20 21:53:13 · 427 阅读 · 0 评论 -
hduoj 3415 Max Sum of Max-K-sub-sequence
Max Sum of Max-K-sub-sequence求解一个数字环中的长度不超过k的连续之和,使得和最大,若存在多个,输出起始位置最小的,同时,长度最短的。一个单调队列的问题,需要对问题有一个很清楚的了解。设nsum[i]表示前i个数字的和,那么很容易,表示出从i+1 开始的到位置j结束的这串数字的和: nsum[j] - nsum[i],由此我们就可以很容易,得到此问题的解,max原创 2012-05-21 21:03:39 · 736 阅读 · 0 评论 -
HDUOJ Minimum Inversion Number
Minimum Inversion Number题目意思很明确,每次将序列的第一个元素放到序列尾,产生一个新序列,求出序列中逆序对的个数,一共有n个这种序列,输出其中最小的逆序对个数。先用线段树求解出最原始序列的逆序对的个数,然后递推。对原始序列的逆序对的个数,在节点信息中添加一个某个区间元素的个数的变量,每次加入新元素的时候,统计当前情况下,其前面的比它大的元素的个数,然后在将元素插原创 2012-05-16 14:34:14 · 304 阅读 · 0 评论 -
hduoj 1754 I Hate it
I Hate it对于区间的值进行修改与查询最大,采用线段树解决。用一个变量来记录某个区间的最大值,同时每次更新后,需要递归回调每个区间的子区间的最大值。用于更新父节点的最大值。程序如下:/*ID: csuchenanPROG: hduoj 1754 I hate itLANG: C++*/#include#include#include#define max(a ,原创 2012-05-15 21:50:02 · 483 阅读 · 0 评论 -
hduOJ 1166: 敌兵布阵
http://acm.hdu.edu.cn/showproblem.php?pid=1166题目意思很明显,需要多次查询,多次进行修改操作。用线段树做,由于每次只对一个点进行修改,所以数据结构中只需要包含和项,而不必要包含修改标志。代码如下:/*ID: csuchenanPROG: hduoj 1166 敌兵布阵LANG: C++*/#include#includ原创 2012-05-15 19:47:55 · 538 阅读 · 0 评论 -
hdoj 1520 Anniversary Party
Anniversary Party树形dp,采用左儿子右兄弟的方式来存储,然后采用递归的方式dp。动规方程很简单,类似于01背包的情况。这里就不在写了。具体的见程序。程序如下:/*ID :csuchenanPROG: hdoj 1520 Anniversary partyLANG: C++*/#include#define MAXN 6010struct Node{ i原创 2012-05-27 00:11:15 · 451 阅读 · 0 评论 -
poj1308:Is It A Tree?
题目链接:http://poj.org/problem?id=1308判断给定的序列是否为能组成树判断条件如下:1.空树是树2.树中无环路存在3除根节点外,每个节点的入度为04.只能存在一个根节点我第二次用并查集写的时候,这题在poj上可以AC却在hduoj上AC不了,各种测试都通过 ,就是不AC,费了很长时间。郁闷!在两个oj上都能AC的代码如下:#include原创 2012-04-04 20:25:25 · 373 阅读 · 0 评论 -
hduoj1272:小希的迷宫
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272题目是判断给定的图是否存在环与孤立的点。使用并查集即可判断,如果存在环路,则必有一条边使得当这条边的两端的顶点的根节点属于同一个集合,因而在合并操作的时候判断这条边的两个节点的根节点是否属于同一个集合。孤立的点,则会出现,合并的最后仍至少有两个点的根节点为自身。poj的1308和此题类似代原创 2012-04-04 17:16:25 · 333 阅读 · 0 评论 -
hduoj1213:How Many Tables
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213互相认识的人在安排在同一桌子上,不认识的人,安排在不同的桌子上。可以使用并查集来解决,将这些人归为若干个集合,每个集合中都是相互认识的,每个集合可以选一个代表,即作为该集合中所有人的父节点。代码如下:#include #include #include using namespac原创 2012-04-04 14:19:53 · 347 阅读 · 0 评论 -
hdoj 1698 Just a hook!
Just a hook!题目意思很清楚,就是对某个区间的数全部更改为某个值。只进行一次查询。用线段树来实现。由于要不断的更改,所以我们这里采用lazy思想,即标记延迟。在更改的时候,并不更改到每个节点,而只是更改到某个区间上,用一个变量记录更改量。当进行下次更改的时候,在更改。程序如下:#include#define MAXN 100005struct Node{ int l原创 2012-05-23 19:59:06 · 401 阅读 · 0 评论 -
hdoj 2795 Billboard
Billboard题目意思很简单,给一个面积为h*w的板子,每次选择一个最上且最左的区域贴上一张纸1*wi,求每次贴的行。每次找出行中保留面积能够满足纸的面积的即可。如果直接用数组模拟的话,肯定会超时。这个题目可以用线段树做。看题的时候,发现h比较大,开数组肯定会超内存。分析一下,发现有n次插入,我们可以假设每次都只能在新的一行中插入,在极限数据下,也只需要4*200000的空间,这样肯定不会原创 2012-05-24 14:38:40 · 384 阅读 · 0 评论 -
Shortest Path
hdu oj 3631 Shortest Path惭愧啊,这个题目在那天的模拟赛中竟然没有搞出来T T,学的floyd竟然白学了,看完题解才恍然大悟。。。。。。。。还有少写一个else ,让我TLE了半天题目是一个动态图,不断的给点做上标记,然后用floyd的办法去更新节点就可以了,当点被做上标记的时候,去更新其他的节点就可以了。那么容易的办法,竟然没有想出来。。。太弱了。。。原创 2012-07-18 19:41:39 · 461 阅读 · 0 评论 -
Hduoj 2243 考研路茫茫——单词情结
考研路茫茫——单词情结自动机+DP+快速幂取模+矩阵快速幂。这个题目和POJ2778很相似,不过这个是求出包含的有多少个。也就是用总的个数减去不包含的。由于长度是1~L内的,所以我们得把所有的情况都给求出来。首先是求构成单词的总的个数,也就是:26^1 + 26^2 + 26^3 +....+ 26^L,当然我们可以将其写成更一般的形式:26*(26^L -1)/25,但是这样计算有很大的问题原创 2012-08-17 11:01:15 · 3902 阅读 · 0 评论 -
POJ 3691 and Hduoj 2457 DNA repair
POJ 3691 DNA repairHduoj 2457 DNA repair AC自动机+DP。先建立AC自动机,再来看DP。和前面类似考虑方程的时候我们可以结合字符串的长度与AC自动机的状态,来写方程。设dp[i][j]是单词长度为i走到j时最少需要修改单词的个数。那么考虑状态的转化,由于要不含致病基因,那么也就是状态不能走到叶节点。考虑状态j是由那些转化而来的原创 2012-08-17 16:53:07 · 537 阅读 · 0 评论 -
hdoj 3298 Contestants
Contestants树形DP题目,这个题目与hduoj4081以及金华邀请赛的power station (POJ 4045)比较相似。不过这个题目相对于后面两个要简单的多。我们可以先进行一遍DFS处理出以1为根节点的树的所有节点的子节点数目,然后就是求最小差值。枚举每条边,这里可以直接枚举点来进行。注意数据范围就可以了。#include #include #include #in原创 2012-08-07 18:43:15 · 701 阅读 · 0 评论 -
hdoj 4081
Qin Shi Huang's National Road System今天作比赛,做了这个题目,整个比赛中就只做了这一道= =。太弱了= = 。这个题目是最小生成树+树形DP。要求的是A/B , B是非特殊边的距离和,而A是特殊边两端城市的人口之和,由于要使得比值尽量的大,所以我们肯定距离要最短。我们可以首先求一下最小生成树,然后直接枚举每条边,去除该边后所能产生的最大比值。我们需要用一个数原创 2012-08-01 16:12:22 · 748 阅读 · 0 评论 -
hduoj 1561 The more, The Better
The more, The Better树形DP题目。树形DP+多重背包问题。由于初始化的原因,wrong了几次。方程很好写。我们先增加一个额外的节点0,同时将对应的攻克的城堡数目+1.方程如下:dp[r][j] = max(dp[r][j] , dp[r][j-k] + dp[u][k])其中u是r的儿子节点.#include #include #include #includ原创 2012-08-07 16:28:04 · 579 阅读 · 0 评论 -
hduoj2063:过山车
http://acm.hdu.edu.cn/showproblem.php?pid=2063一道典型的二分图的匹配。将女生与男生区分开作为两个不同的集合,如果女生a愿意和男生b一起,那么a ,b之间连线。然后对女生中的每一个进行扩展,找出最多的边。注意初始化等细节即可。代码如下:#include #include #include using namespace std;原创 2012-04-04 01:34:11 · 528 阅读 · 0 评论