自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 POJ 1655 Balancing Act 树形dp

题意:一棵树,定义每个节点的balance值:去掉这点节点后的森林里所有树的最大节点数。求出最小的balance值和其所对应的节点编号。 对于删除的每一个点,计算下它的每颗子树的节点数与剩余的子树的节点数,做一下比较。 dp[x][0]  以x节点为根的子树的最大节点数 dp[x][1] 包含x祖先的子树的节点数 注意边界的处理 #include #include #include

2016-05-28 08:47:05 430

原创 POJ 3140 树形dp

题意:一棵n个结点的带权无根树,从中删去一条边,使得剩下来的两棵子树的节点权值之和的绝对值最小,并求出得到的最小绝对值。 水题,首先把每棵子树的权值之和处理出来,在dfs一次做一下比较就好 #include #include #include #include #include #include #include #include #define LL long long us

2016-05-28 08:41:48 424

原创 HDU 4276 树形dp+spfa+分组背包

题意:给你n个点,n-1条边构成树,每条边有边树,每个点有点权(表示走每条边的时间),问在时间T从点1走到点n,能够得到最多的点权有多少。 首先我们至少要保证1到n的最短路在时间内,此时用spfa,其次,在最优的情况下,最短路径上的边只会经过一次,而其他边会经过两次,对于最短路上的边,spfa走的时候记录权值,然后赋值为0就可以了。对于其他边就可以跑树形dp了。 #include #incl

2016-05-23 10:32:34 498

原创 HDU 4003 树形dp+分组背包

求K个机器人从同一点出发,遍历所有点所需的最小花费 注意到,对于某个节点为根节点的子树,如果需要遍历完再回来,一个机器人遍历的花费 #include #define INF 0x3f3f3f3f using namespace std; const int maxn = 1e4+6; int dp[maxn][12],head[maxn],n,kk,s,num; struct list {i

2016-05-23 10:22:08 620

原创 POJ 1155 经典树形dp+分组背包 + 模板

题意:电视台发送信号给很多用户,每个用户有愿意出的钱,电视台经过的路线都有一定费用,求电视台不损失的情况下最多给多少用户发送信号。 dp[i][j]代表i节点为根节点的子树j个用户的时候最大剩余费用。 dp[i][j] = max(dp[i][j], dp[i][k]+dp[son][j-k]-w[i][son]); #include #include #include using n

2016-05-23 10:15:54 784

原创 POJ 2486 树形dp

题意:一颗树,n个点(1-n),n-1条边,每个点上有一个权值,求从1出发,走V步,最多能遍历到的权值 dp[root][k]表示以root为根的子树中最多走k时所能获得的最多苹果数 在经典树形dp的套路上,注意到有时候走完一条路需要返回,此时需要考虑走完某个节点需不需要回来 dp[root][j][0] = MAX (dp[root][j][0] , dp[root][j-k][0]

2016-05-23 10:10:03 425

原创 HDU 4417 主席树

区间查询 查询[l,r]区间只需要将第r棵线段树[0,H]区间的总数减去第l-1棵的就行了。 需要注意的是边界的处理 #include using namespace std; const int maxn = 1e5+6; struct node {int l,r,sum;}T[maxn*20]; int root[maxn],a[maxn],cnt; vector q; int ge

2016-05-14 13:48:38 470

原创 主席树水题 HDU2665

和POJ 2104一模一样,不多说 #include using namespace std; const int maxn = 1e5+6; struct node {int l,r,sum;}T[maxn*20]; int root[maxn],a[maxn],cnt; vector q; int getid(int x){return lower_bound(q.begin(),q.e

2016-05-14 10:28:07 662

原创 主席树入门+模板 POJ 2104

查询区间第K大,而且没有修改。 主席树的原理就是在现有的一颗线段树上不断加入新的节点,而加入的对于现有线段树的影响另开一条链记录下来,这样我们就可以保存线段树的历史版本,在查询时只需要把区间减一下就可以了。 #include #include #include using namespace std; const int maxn = 1e5+7; vectorq; int a[maxn

2016-05-14 00:07:18 541

原创 莫队算法入门 + 模板 Codeforces 617E

题意已知一个长度为n的数列 (0 ≤ ai ≤ 1 000 000) ,给m个区间,问每个区间有多少个子区间xor和为k  (1 ≤ n, m ≤ 100 000, 0 ≤ k ≤ 1 000 000) 莫队算法  如果你知道了[L,R]的答案。你可以在O(1)的时间下得到[L,R-1]和[L,R+1]和[L-1,R]和[L+1,R]的答案的话。就可以使用莫队算法。 先对序列分块。然后

2016-05-13 20:07:58 2377 1

原创 AC自动机+矩阵快速幂 HDU 2243

做这个题之前最好做一下POJ 2278(题解) 在POJ2278的基础上, 最终的答案就是26^1+26^2+......+26^L减去A^1+A^2+....+A^L 我们构造这么一个矩阵 |A  ,  1|                               |0  ,  1|       它 的n次方等于 |A^n , 1+A^1+A^2+....+A^(n-1)

2016-05-13 13:00:59 1027

原创 AC自动机+矩阵快速幂 POJ 2778

题意:有m种DNA序列是有疾病的,问有多少种长度为n的DNA序列不包含任何一种有疾病的DNA序列。(仅含A,T,C,G四个字符) 首先我们需要知道 给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数mod p的值 把给定的图转为邻接矩阵,即A(i,j)=1当且仅当存在一条边i->j。令C=A*A,那么C(i,j)=ΣA(i,k)*A(k,j),实际上就等于从点i

2016-05-12 21:03:43 1054 1

原创 AC 自动机 HDU 2896

自动机水题,注意输出的是web的编号不一定连续以及别忘了输出冒号 #include using namespace std; int ans[505],n,m,sum; char buf[10010],str[505][205]; struct Trie { int next[505*205][128],fail[505*205],end[505*205]; int root,

2016-05-11 13:38:57 418

原创 AC自动机 HDU3065

自动机水题  注意多组输入!!!! #include using namespace std; int ans[1001],n; char buf[2000010],str[1001][55]; struct Trie { int next[50001][128],fail[50010],end[50001]; int root,L; int newnode()

2016-05-11 12:12:33 522

原创 AC自动机入门+模板 (HDU 2222)

Aho-Corasick算法是多模式匹配中的经典算法 多模式匹配就是有多个模式串P1,P2,P3…,Pm,求出所有这些模式串在连续文本T1….n中的所有可能出现的位置。 步骤 1.建立模式的Trie 2.给Trie添加失败路径 3.根据AC自动机,搜索待处理的文本 重难点 构造失败指针 设这个节点上的

2016-05-10 23:17:33 436

空空如也

空空如也

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

TA关注的人

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