自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Hhaile的专栏

在ACM的路上你时刻会发现,很多天生就比你聪明的人,后天比你更加勤奋!你没有停下来休息的资本,没有资格去懒散。

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

原创 LCA 多次询问 解法总结

N个节点,M次询问,求两点间的最近公共祖先一、

2014-10-28 15:13:27 1041

转载 编程之美-中国象棋将帅问题

首先,我们归纳总结一下展开原理,对于 a*b = i ,我们可以用如下公式展开    loop1=i%b;    loop2=(i/b)%a  其中loop1是内层循环,loop2是外层循环  那么如果 a 本身就是 k*j 组成的呢?由于 k*j = i/b  ,套用公式得到       loop1= (i/b)%j    loop2= ((i

2014-09-19 11:15:54 847

转载 分布式计算、网格计算和云计算

1、分布式计算所谓分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。最近的分布式计算项目已经被用于使用世界各地成千上万位志愿者的计算机的闲置计算能力,通过因特网,您可以分析来自外太空的电讯号,寻找隐蔽的黑洞,并探索可能存在的外星智慧生命;您可以寻找超过1000万

2014-08-22 11:12:15 1172

原创 【HDU3721】枚举+最长路

题意:给你一颗n个节点n-1条边的树,每条边都有一个权值,现在让你任意移动一条边然后把这条边连接到任意两个点上,最后问你怎样移动才能使树上相距最远的两个点距离最小。 思路:先求出树的最长路,然后枚举移动最长路上的所有边,移走这条边后,原树必定分为不连接的两颗子树,分别求这两颗子树的最长路,然后分别找到两颗子树最长路上靠近中点的点,那么最长路有三种情况:假设这条边为 u -> v1.u的

2013-09-20 14:14:55 1422

原创 HDU 4679 Terrorist’s destroy (拆边+树的直径)

给一棵树,每条边上都有一个权值,去掉树上任意一条边之后,分成两个子树,两个子树的最长路与这条边上的权值相乘,的到一个乘积。问去掉那一条边可以使这个乘积最小。首先找到树上的最长路,那么删边的时候有两种情况:1. 这条边不是最长路上的边2. 这条边是最长路上的边对于第一种情况,很容易计算出乘积。对于第二种情况,只需要计算出被分成的两个子树里面的最长路径长度即可,这个可以预处理一下。

2013-09-20 13:58:15 1021

原创 SPOJ 375. Query on a tree【树链剖分】

http://www.spoj.pl/problems/QTREE/给一颗树,每条边有一个权值。有两种操作:1、修改某条边的值;2、询问a、b两点路径上边权的最大值。树链剖分。#include #include #include #include using namespace std;#define maxn 100100#define lson (pos<<

2013-09-17 11:07:54 3652

原创 hdu4714 Tree2cycle 树形DP

题目是问把一棵树通过剪边、加边形成一个环的最小代价。分成两步,先把树剪成一些链,再把链连接成一个环。My Code://dp[u][0]表示u节点是所在链的端点时,以u节点为根节点的子树形成的最少的切边数。//dp[u][1]表示u节点是所在链的中间的点时,以u节点为根节点的子树形成的最少的切边数。#pragma comment(linker,"/STACK:102400000,1

2013-09-10 23:09:33 781

原创 POJ 1895 Bring Them There 分层构图 求最大流 并输出路径

这个题在输出路径上上纠结了好久,直到我遇到了下面这个代码,,堪称完美!Code: //神一样的思想,神一样的代码,我佩服的五体投地!! //题目给出五个正整数n,m,k,s,t。n表示n星球,m表示m个双向隧道, //k,s,t表示要把k个电脑从s星球运到t星球,双向道只能单行,走一条 //道用时一天,求最短时间,并输出运输方案。 //

2013-09-06 10:12:02 1266

原创 HDU 1733 [Escape] 分层图网络流+枚举时间

题目大意:给定一个矩阵,'.'表示空位,'X'表示人,'#'表示墙,'@'表示门,每个位置至多只能站一个人,人不能穿越墙,人能从门中出去。每个人每分钟只能上下左右移动一步,问最少需要多少时间让所有的人出去。思路:(1):把每个点按照天数拆成d个点。(2):添加源汇点S和T。(3):源点向第0天地图上人所在位置的点连一天容量为1的边。(4):枚举时间Ti(5):每次枚举只

2013-09-05 17:05:27 1229

原创 hdu4628状态压缩DP

这题学到了一个方法吧:如果要枚举集合S的子集:for(int i = S; i > 0; i=(i-1)&S)如果要枚举包含S的集合:for(int i = S; i 很巧的方法,以前从未见过,在这mark下了。下面给出两种方法的代码:记忆化搜索:#include #include #include #include using namespace

2013-07-31 10:36:28 870

转载 背包专辑(转)

(解题报告本人所写,博客内容转自zeroclock)这短时间看了论文《背包九讲》,看到背包问题解法中的优美之处也看到背包问题在现实中的应用,总结出一句话:背包问题值得一看。    背包问题可以概括为这样的模型:有若干种选择,每种选择有一定的代价和价值,做某些选择会得到特定的状态,问我们在约定的条件下怎么得到特定的状态?这里的状态可以是代价和或者价值和或者由其他这两者组合而来的状态。这类问题

2013-07-29 19:51:32 887

转载 树形DP总结(转)

树,一种十分优美的数据结构,因为它本身就具有的递归性,所以它和子树见能相互传递很多信息,还因为它作为被限制的图在上面可进行的操作更多,所以各种用于不同地方的树都出现了,二叉树、三叉树、静态搜索树、AVL树,线段树、SPLAY树,后缀树等等..     枚举那么多种数据结构只是想说树方面的内容相当多,本专辑只针对在树上的动态规划,即树形DP.做树形DP一般步骤是先将树转换为有根树,然后在树上进行

2013-07-29 19:48:29 2908

原创 hdu 4614

题意:给你N个花瓶,编号是0  到 N - 1 ,初始状态花瓶是空的,每个花瓶最多插一朵花。然后有2个操作。操作1,a b c ,往在a位置后面(包括a)插b朵花,输出插入的首位置和末位置。操作2,a b ,输出区间[a , b ]范围内的花的数量,然后全部清空。很显然这是一道线段树。区间更新,区间求和,这些基本的操作线段树都可以logN的时间范围内完成。操作2,很显然

2013-07-26 18:50:28 2115

原创 LCA和RMQ模板

一、最近公共祖先(Least Common Ancestors)对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u、v的祖先且x的深度尽可能大。另一种理解方式是把T理解为一个无向无环图,而LCA(T,u,v)即u到v的最短路上深度最小的点。这里给出一个LCA的例子:例一对于T=V={1,2,3,4,5}E={(1,2),(1,3

2013-05-12 22:46:14 1047

原创 tarjan求强连通分量模板

在有向图中,如果两个顶点间至少存在一条路径,称两个顶点强连通。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量。而用tarjan算法可以起求出各个强连通分量,然后再把强连通分量缩成一个点,非强连通图就被转换成一个DAG,去多问题都是在此基础上求解。以下是模板:#include #include #

2013-05-07 21:59:42 940

原创 割点,桥模板

求割点:割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点若low[v]>=pre[u],则u为割点。这说明v的子孙不能够通过其他边到达u的祖先,这样去掉u之后,图必然分裂为两个子图。这样我们处理点u时,首先递归u的子节点v,然后从v回溯至u后,如果发现上述不等式成立,则找到了一个割点u,并且u和v的子树构成一个块。求割边(桥)割边(桥):删掉它之后,图

2013-05-07 21:51:12 816

转载 北大ACM试题分类

转载请注明出处:優YoU http://blog.csdn.net/lyy289065406/article/details/6642573  最近AC题:2528   更新时间:2011.09.22  已AC题数:146初级题已在2011.06.30全部完成 部分解题报告添加新内容,除了原有的“大致题意”和“解题思路”外,新增“Source修正”,因为原S

2013-05-07 15:33:03 792

转载 十个利用矩阵乘法解决的经典题目

这篇文章很经典,我是从这儿http://www.matrix67.com/blog/archives/276/看到的! 好像目前还没有这方面题目的总结。这几天连续看到四个问这类题目的人,今天在这里简单写一下。这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质。    不要以为数学中的矩阵也是黑色屏幕上不断变化的绿色字符。在数学中,一个矩阵说穿了就是一个二维数组。一个n行m列的矩

2013-05-04 14:52:45 903

转载 01分数规划

【关键字】0/1分数规划、最优比率生成树、最优比率环【背景】 根据楼教主的回忆录,他曾经在某一场比赛中秒掉了一道最优比率生成树问题,导致很多人跟风失败,最终悲剧。可见最优比率生成树是多么凶残的东西,但是这个东西只要好好研究半天就可以掌握,相信你在看了我写的这篇总结之后可以像楼教主一般秒掉这类问题。因为网上对于01分数规划问题的详细资料并不是太多,所以我就结合自己的一些理解总结这种问

2013-05-04 14:47:20 19438 3

原创 求模的逆元

欧拉函数Φ(n)一些定理:•欧拉定理–a和n都是正整数,且a和n互素,则aΦ(n) ≡ 1 (mod n)•ab (mod n) = a(b % Φ(n) + Φ(n)) (mod n)•ab (mod n) = a(b % Φ(n))(mod n),gcd(a,n)=1•费马小定理(欧拉定理弱化形式)–设a是正整数,p是素数,且a和p互素,则p

2013-05-02 22:06:52 3758

原创 矩阵快速幂好题PvZ once again

题意:植物大战僵尸算个out的游戏了,原谅被出题逼疯了的跑来挖坟了。会玩的请无视这一段直接看题目{游戏中僵尸向你的房子进发,吃掉沿途遇到的植物进入你的房子 你就死翘了你在土地上种植各种植物来攻击阻挡僵尸手推车:放置在终点,僵尸走到面前会启动推倒一整行的僵尸大蒜:可种植的一种植物,发出恶心的气味,僵尸咬了一口就会换到邻近的另一行(如果有相邻两行,那么移动到另外两行概率是相等的

2013-05-01 09:36:30 962

转载 一位ACMer过来人的心得

【转】一位ACMer过来人的心得(转载) 刻苦的训练我打算最后稍微提一下。主要说后者:什么是有效地训练?       我想说下我的理解。       很多ACMer入门的时候,都被告知:要多做题,做个500多道就变牛了。其实,这既不是充分条件、也不会是必要条件。       我觉得一般情况下,对于我们普通学校的大学生,各方面能力的差距不会太大,在这种情况下,训练和学习的方法尤为

2013-04-29 15:11:08 740

转载 多重背包问题的二进制分解思想

在这之前,我空间好像转过一个背包九讲,现在我就只对    01背包和多重背包有点印象了    先说下 01 背包,有n 种不同的物品,每个物品有两个属性    size 体积,value 价值,现在给一个容量为 w 的背包,问    最多可带走多少价值的物品。 int f[w+1]; //f[x] 表示背包容量为x 时的最大价值 for (int i=0; i

2013-04-29 15:08:39 1458

原创 01背包好题 ZOJ3703 Happy Programming Contest

是浙大校赛上的一道题。题意:给你总时间,一些题,每个题给你所花时间,吸引力值。然后问你在总时间内,选取一种A题方案,使获得的吸引力值最大,如果有多种,则选择题数较多的,如果有多种,选择罚时较少的。本题重点就是后面的几种比较关系;如果单看第一个条件,就是裸的01背包,但是怎么处理剩下的2个条件呢,也就是在状态转移中加入一些条件:f[v]=max{f[v],f[v-c[i]]+w[i]}

2013-04-29 14:03:51 903

原创 C++STL

#include #include #include #include #include #include #include #include #define A first#define B second#define mp make_pairusing namespace std;typedef pair > sta;sta mksta(int a, int b,

2013-04-29 13:51:20 659

原创 后缀数组模板

我的模板是根据 罗穗骞 和 网上一模板 相结合改编而来,层次更加分明,数组名称的选择是根据用途来定义的,总的来说应该更好理解一些:先声明一些概念:k-后缀数组:我这里用的是 sa[ ] ( k )k-名次数组:我这里用的是 rank[ ] ( k )我的思路是知道rank[ ](1) 先求出sa[ ](1),然后根据 sa[ ](1) 和 rank[ ](1) 调用so

2013-03-28 19:11:50 734

转载 manacher算法 解决回文

manacher算法 manacher算法,主要是用来求某个字符串的最长回文子串.时间复杂度为O(n).首先,在字符串s中,用rad[i]表示第i个字符的回文半径,即rad[i]尽可能大,且满足:s[i-rad[i],i-1]=s[i+1,i+rad[i]]很明显,求出了所有的rad,就求出了所有的长度为奇数的回文子串.至于偶数的怎么求,最后再讲.假设现在求出了

2013-03-27 12:11:02 710

原创 SRM 543

div1 250令f[X] = 1^2^3^......^X;找规律发现X= 1, 2, ... 20. The sequence is {1, 3, 0, 4, 1, 7, 0, 8, 1, 11, 0, 12, 1, 15, 0, 16, 1, 19, 0, 20}Can you see it?If X mod 4 == 0, then X. If X mod 4 == 1 the

2013-02-21 23:14:04 619

原创 SRM 521

赛后做的这些题,值得一提的事div2的1000和div1的500题意差不多,在平面上给你一些点,用正方形去圈这些点,在保证所圈的点集不同的情况下有多少个这样的正方形。div2 1000给你的正方形边长是固定的,而div1 500边长有一个范围。思路:首先要将给你的点得坐标离散化,形成一个个网格,然后我需要利用这些格点来枚举正方形;这里我没有直接枚举正方形,我先枚举由这些格点构成的矩

2013-02-20 20:03:03 634

原创

给你一个数组,叫你把这个数组整理成有序且不重复的数组最好的方法是:给你x[]数组    setsx;                  //声明一个sx的集合    sx=set(x.begin(),x.end()); //将x中的元素全部存入sx中,此时sx中的元素有序且不重复;    vector px;                            px=vect

2013-02-20 01:54:18 459

原创 有关字符窜的一些处理

1.要把一些数字读入到字符窜中:此时非常便捷的写法是用      sprintf(temp, "%d", a[i])   //temp是目标字符串, a[i]是数;2.从一些有分隔符的字符窜中取出所有的数:比如:10,23,22,45,10先把所有的分隔符转化成空格 :10 23 22 45 10istringstream s(customers[0]);

2013-02-20 01:48:02 666

原创 数位DP

srm465 div2 1000题意是有一段连续的时刻表,有n个时刻,现在给你的仅仅是分钟序列,让你复原小时序列,并求出按字典序排列第k小的序列。我用f[i][j]表示第i位为j小时的序列有多少种。首先如果我已经求出了所有的f[i][j],那么为了求第k小的,我会这样做:从f[0][0]开始枚举,看k,如果k>f[0][0],那么让k-=f[0][0],继续找f[0][1]。。。。

2013-02-18 22:54:27 554

原创 求树的子树数目

题目是srm 570 div2的1000题意转化一下就是 给你一棵树,叫你求这颗树的子树有多少个,包括空树。我们用f[i]来表示以节点i为根的树的数目。首先如果只是一个节点,那么以它为根的树的数目为1.如果以a为根的一棵树有k个儿子,那么f[a] = (f[a1]+1)*(f[a2]+1)*(f[a3]+1)....由此可用记忆化搜索将f[1]到f[n]全都求出来,

2013-02-18 21:29:15 1543

原创 区间内出现某个数k次的数目问题

hdu4358题意是给你一棵树,每个节点都有一个权值,问你某个节点及其子节点中权值出现k次的有多少个。首先要想到把树转化为连续区间,先读取所有询问进行离线处理。把询问的子树转化成区间,按区间的右端点从小到大排序。然后从左到右循环整个区间每个值。假设当前循环到了第i个位置,这个位置的值为v,维护一个树状数组,树状数组中d位置的值就是区间[d,i]中出现k次的权值的种类,考虑到价值v的维护,记

2013-02-17 20:33:10 852

原创 uva 11205 - The broken pedometer

题意是用最少的二进制位数表示一些不同,这个题关键是要将给你的二进制数转化为在枚举要用到某些二进制位情况下对应的十进制数,,并以此来判断是否相同。#include #include #include #include using namespace std;int exp[16], a[101];int main(){ exp[0]=1; for(int

2013-02-15 13:00:47 677

原创 博弈进行时~

博弈,搞起!小知识点HDOJ2176 取(m堆)石子游戏 [输出第一步走法]若给出的是必胜状态:a1^a2^.......^an=k,(其中k不为零),那么我们的目的是要把必胜状态转化为必败状态从 而使得先手胜利。若a1^a2^...^an!=0,一定存在某个合法的移动,将ai改变成ai'后满足a1^a2^...^ai'^...^an=0。若a1^a2^...^an=k

2012-12-04 00:13:42 856

原创 H. Queries for Number of Palindromes

这个题老实说算做了一天,,一方面是dp没怎么做,,另一方面还是自己粗心dp有个原则一定是 已知推未知!题意是 给你一个主串,询问你一个范围的所有回文子串的个数。首先我要先预处理一个is数组,判断i到j这个串是否是回文;然后状态转移,有两种转移方法:1.f[i][j]表示 i 到 j 中以 i 开头的子串的个数;递推关系是:f[i][j] = f[i][j-1]+is[i][

2012-11-25 22:00:53 837

原创 Codeforces Round #151 (Div. 2)

D题:这题比较的坑,首先题意要明确:有一些点,给你这些点的颜色(可能重复),再给你这些点构成的图,叫你求 某种颜色 周围 不同的颜色数,输出其中数目最多的那个颜色,也就是这个颜色周围不同的颜色数最多,如果数目相同,输出颜色序号小的那个。这里有个大坑,题目要求是求 某种颜色 周围,而不是某个点周围,因为有些点的颜色可能相同, 也就是说在求某种颜色周围的时候可能是 多个点的 周围一起求。

2012-11-25 01:22:15 622

原创 SRM 561

500:ICPCBalloons题意:改变最少的气球颜色数目,使对应的题目的气球数目大于等于需求数目。这里气球最多50种,值得注意的是题目种类最多15种,,赤裸裸的状态压缩!!!!首先在不考虑气球大小的情况下,如果气球总数大于题目需求数,那么肯定是能解得;然后我们从大到小把气球和题目一一对应,气球不够的直接补上(不管从哪补得),如果气球种类比题目种类少的话,在匹配剩下的多余的题目时

2012-11-21 20:05:11 1099 5

原创 uva 297 Quadtrees

这题先分别建树,再先序遍历。值得注意的是,可能会有这样的数据:ef或者 fpffee之类的。我是用的指针:#include #include #include #include #include #include #include #include #include #include #include usin

2012-11-08 00:13:33 593

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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