自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Mr.Phoebe的专栏

退役后还是一个弱渣

  • 博客(35)
  • 资源 (1)
  • 收藏
  • 关注

原创 HDU 5406【费用流 或 dp+树状数组】

拆点,容量为1表示每个点只能用一次,费用为-1表示经过了几个点 建立超级源向源点连接容量为2的边,表示两个上升序列。spfa用了栈就可以过了。// whn6325689// Mr.Phoebe// http://blog.csdn.net/u013007900#include <algorithm>#include <iostream>#include <i

2015-08-31 23:19:35 697

原创 HDU 5409 CRB and Graph【dfs序+RMQ】

先用trajan缩环变成了一棵树 然后删除了一条边就将树分成了两个部分,一个是删除的那边下面的子树,一个是剩余部分。那么要查询的是两个部分中最大的点的值,和不大于它的最小的点的值。这样一想就有点像树链剖分啊,树形DP一样求出一颗子树的某个最大值。 又想到是分离出一颗子树,那么就是想到一些dfs序可以对子树进行区间求值。那么就想到可以预处理出dfs序列,将树的值转化为一个区间值。去掉一颗子树,就是将

2015-08-31 22:17:12 667

原创 UVAlive 6426 Count【读入】

You have: • A matrix of natural numbers, with the property that all rows and all columns are sorted in ascending order (i.e. A[i,j]≥A[i−1,j]A[i,j] ≥ A[i−1,j] and A[i,j]≥A[i,j−1]A[i,j] ≥ A[i,j −1] for

2015-08-29 20:18:27 622

原创 HDU 3518 && HDU 4416【后缀自动机len的使用】

max:即代码中 len 变量,它表示该状态能够接受的最长的字符串长度。 min:表示该状态能够接受的最短的字符串长度。实际上等于该状态的 fail 指针指向的结点的 len + 1。 max-min+1:表示该状态能够接受的不同的字符串数。那么在HDU 3518 中。 求的是,不相交且出现次数大于2的子串个数。 我们这么想,如果你把一个串直接塞进后缀自动机里面,比较难以处理(不是没有办法,

2015-08-28 10:43:39 1399

原创 POJ 2104【整体二分】

整体二分的想法就是将操作进行分块,将相互影响的操作放在一块。这题要注意分治结束条件 在没有离散化的情况下,就要以操作判断结束条件,当然这题操作数比较小,这样的话也更快。 下面的姿势是重排下标,总感觉重排结构体会慢一些….实际上好像没什么影响// whn6325689// Mr.Phoebe// http://blog.csdn.net/u013007900#i

2015-08-27 22:28:47 1245

原创 HYSBZ - 2434 && Codeforces 163 E【AC自动机+dfn序列】

两道题都是建立逆fail树,进行区间操作。阿里的打字机// whn6325689// Mr.Phoebe// http://blog.csdn.net/u013007900#include <algorithm>#include <iostream>#include <iomanip>#include <cstring>#include <climits>

2015-08-26 21:15:30 567

原创 Aizu 2302 On or Off

传送门 暴力模拟 因为每个房间之间只有一条路,所以不用什么决策或者dp dfs出每个点经过的时间,然后比较,cost[i][j]×(Tnow−Tpre)cost[i][j]\times (T_{now}-T{pre})与on[i][j]+off[i][j]on[i][j] + off[i][j]哪个小就选哪个。 第一次经过一定要开灯和最后一次经过一定要关灯。所以只要经过了就需要加上on[i]

2015-08-22 19:16:58 581

原创 HDU 5221 Occupation

算是一个比较裸的树链剖分。。。但是为什么比赛的时候没人做。。。 树上每个点都有权值 3个操作 1° ans += u~v路径上点权值之和 2° 将点u的权值从ans中剔除 3° ans += 以u为root的子树的点权之和1和2都是树链剖分的基本操作。至于3,如果你是dfs建图的话,那么你剖出来的点的序号终究是他们的dfs序,所以一个u的子树在序中的范围就是id[u] + size[u]

2015-08-21 23:44:27 759

原创 HDU 5413 CRB and Roads【bitset】

判断u→vu\rightarrow v这条边是不是redundant就是看有没有另一条u→p1→p2→p3.....→vu\rightarrow p_1\rightarrow p_2\rightarrow p_3.....\rightarrow v路径的存在。 因为图是有向无环图,所以存在拓扑序,那么很明显有u,p1,p2,p3,...,vu, p_1, p_2, p_3, ..., v这些点存

2015-08-21 21:16:36 1013

原创 HDU 5412 CRB and Queries【整体二分+树状数组】

裸动态区间第K大 据说树套树很容易MLE,要有很厉害的姿势才能够 于是就只能用整体二分代码有加注释,学自这儿// whn6325689// Mr.Phoebe// http://blog.csdn.net/u013007900#include <algorithm>#include <iostream>#include <iomanip>#include

2015-08-21 11:54:10 1504

原创 HDU 5333 Undirected Graph【LCT+BIT】

LCT: 每次操作相当于只把区间[L,R][L,R]之间的边连起来,求联通分量的个数。 思路: 把操作排序后,对于区间[L,R][L,R]的操作,先把R所有v<Rv<R的边(R→v)(R\rightarrow v)加入集合, 用动态树+并查集维护[1,R][1,R]的联通分量的个数cnt 那么,答案==[L,R][L,R]区间的联通分量的个数+N−R+L−1+N-R+L-1; 求区间[L

2015-08-19 13:09:52 592

原创 HDU 5398 GCD Tree

这题可以基本说是LCT的模板题目,几乎没什么多余的考虑。不像HDU 5333,那题除了用LCT维护最大生成树之外还有一些复杂的公式推算。 对于多组数据,从1枚举到n,然后加入他向因子连的所有边,使用LCT维护最大生成树即可。 因子连边不知道随机顺序地连边能不能过,但是可以证明的是,如果现在枚举到ii,那么往ii最大的约数连边一定没有环,所以可以直接连边。然后也可以觉得(这个是我YY的),往小的约

2015-08-19 13:00:02 1561 5

原创 HDU 5401 Persistent Link/cut Tree

考虑爆搜,树i生成后,两两点对路径分成两部分,一部分不经过中间的边,那么就是aia_i和bib_i的答案,如果经过中间的边,首先计算中间这条边出现的次数,也就是aia_i,bib_i子树大小的乘积。对于aia_i,对答案的贡献为所有点到cic_i的距离和乘上bib_i的子树大小。bib_i同理。那么转化为计算在树i中,所有点到某个点j的距离和。假设j在aia_i内,那么就转化成了aia_i内j这个点

2015-08-18 22:04:23 1016

原创 SPOJ 8222 Substrings

题意: 给一个字符串S,令F(x)表示S的所有长度为x的子串中,出现次数的最大值。 求F(1)..F(Length(S)) Length(S) <= 250000题解: 我们构造S的SAM,那么对于一个节点s,它表示的串长度范围是 [Min(s),Max(s)],同时他的出现次数是|Right(s)|。那么我们用 |Right(s)|去更新F(Max(s))的值。 同时最后从大到小依次用F(i

2015-08-18 11:00:04 597

原创 SPOJ Longest Common Substring II

求十个串的最长连续公共子串。 第一个串建立自动机。 用其它每个串在自动机上跑一遍,记录每个状态上能匹配的最长长度。 然后求每个状态匹配长度的最小值。注意每个状态能匹配的,每个状态的父节点也能匹配。 利用拓扑排序(按照len),从深到浅依次更新父亲的匹配长度。模板敲错了,TLE了一个早上。// whn6325689// Mr.Phoebe// http://b

2015-08-17 18:11:39 463

原创 2014 Asia Xian Regional Contest G The Problem to Slow Down You 【Palindromic Tree】

我们对两个字符串分别建立回文树,然后分别从节点0和1开始dfs,如果两个串都可以往某一个走,则ans+=两个串该节点下cnt的乘积,然后沿着这个方向继续dfs。当然也可以用hash表示这个串,然后再累计一下A串的hash值,与B串的相同hash值的乘积。// whn6325689// Mr.Phoebe// http://blog.csdn.net/u0130079

2015-08-16 20:26:37 524

原创 Tsinsen A1393. Palisection 【Palindromic Tree】

题目链接和上一题刚好相反,这个求的是所以相交的回文串的对数。 但是如果直接求比较难求,于是我们先求出上一题要求的,不相交的回文串的对数。 然后用总对数-不相交的对数,就是相交的对数。求总回文串的个数方式有几个,一种是用每一个字符所在节点的num[p]累加。这个比较直观,好理解。 一种是在count计算本质不同的回文串的时候,累加cnt。因为每次都要累加到fail节点上去,那么说明fail节点有

2015-08-16 12:45:27 564

原创 HDU 5157 Harry and magic string 【Palindromic Tree】

回文树第一题,太裸了。 题目分析: 令len为字符串长度,字符串下标从0开始。从字符串最后一个字符开始插入回文树构造回文树,记录以下标i~len-1为起点的回文串的个数的sum[i]。然后再正着构造一次回文树,边构造边累加答案,设x为以下标i的字符为结尾的回文串个数,则ans+=x*sum[i+1]。 最后输出ans即可。 PS:如果想了解回文树,可以戳这里:Palindromic Tree

2015-08-16 10:43:41 543

原创 GYM 100523 I【二分图的最大点权独立集】

Intelligence Quotient ILOAt the University of Byteland one can only study maths and computer science. Currently there are n maths students and m computer science students. These majors are so hard to

2015-08-15 21:33:41 708

原创 HDU 5383 Yu-Gi-Oh!

先将所有的攻击力加起来 然后用费用流跑增加的攻击力 建图: 建立成一个二分图 源点向Non-t连边,容量为1,费用为0,Non-t向Tun连边,容量为1,费用为 - max(合成能够增加的攻击力-两个材料怪的攻击力和,0),Tun向着汇点连边,容量为1,费用为0。 一开始用了拆点使得每个点只能用一次,通过费用流来决策 自身攻击力 和 合成攻击力 的选择,然后一直TLE。最后其实是通过人工

2015-08-14 17:19:01 872

原创 HDU 5384 Danganronpa【AC自动机】

AC自动机模板题 和HDU 2222不同的是,HDU 2222每次匹配之后就要把end清空,他求的是,模式串中有多少个出现在文本串中。// whn6325689// Mr.Phoebe// http://blog.csdn.net/u013007900#include <algorithm>#include <iostream>#include <ioman

2015-08-13 21:08:17 529

原创 HDU 5385 The path

如果我们知道每个点的disdis值和最短路径树的话,方案是很容易构造的我们可以采取贪心做法,一开始将11号点作为最短路径树的根,然后左边从22开始,右边从nn开始,只要之前加入的点有边连向他们就加入这样一个点加入的时间就是他的disdis值,最短路径树上的父亲也可以确定,于是输出时非树边长度为nn,树边长度为两个端点disdis之差。// whn6325689// Mr.Pho

2015-08-13 20:50:02 769

原创 HDU 5386 Cover

有几种思路倒过来做 枚举每个操作,然后判断该操作是不是最后一个操作。 判断是否是最后一个操作方法就是,除去已经用过的点,如果一排都相同的话,那就是最后一个操作。 如果是最后一个操作的话,就把所以的同样类型同样行列的废操作放在他们的前面。#include <bits/stdc++.h>using namespace std;const int MAXN=105;int n, m;char

2015-08-13 20:35:57 814

原创 HDU 5378 Leader in Tree Land【树形DP】

第一种思路是最普遍的树形DP dp[u][i]dp[u][i]表示u这个节点以及下面的子树,有i个leader的方案数。 首先,我们考虑,每棵子树上面的leader,他们的个数是不会因为父亲节点的取值而减少的,所以符合加法性质,因此可以直接累加上去。于是可以用背包的方式直接累加上去。 其次,要计算一次组合数,和普通的树形DP相像,从一开始可以分配Csz[v]sz[u]C_{sz[u]}^{sz

2015-08-12 17:09:51 612

原创 HDU 5374 Tetris

唯一的坑点是#号 剩下就是细节了,我这里的姿势有点不太好,solve函数在中间return的时候没有将操作数的下标+1,导致查了半天…// whn6325689// Mr.Phoebe// http://blog.csdn.net/u013007900#include <algorithm>#include <iostream>#include <ioman

2015-08-12 12:41:48 1075 2

原创 HDU 5371 Hotaru's problem

利用Manacher求出每两个数字中间位置的回文长度之后利用set进行维护,大题思路如下:要满足题目所要求的内容,需要使得两个相邻的回文串,共享中间的一部分,比如上边的两个字符串,共享 8 9 10这一部分。 也就是说,左边的回文串长度的一半,要大于等于共享部分的长度,右边回文串也是一样。 因为我们已经记录下来以第i个点和第i+1个点为中心的回文串长度, 那么问题可以转化成,相距x的两个数a[i],

2015-08-12 10:24:30 523

原创 HDU 5372 Segment Game

线段包含问题本身的解答是CDQ分治,时间复杂度为O(nlog(n)2)O(nlog(n)^2) 但是这题会卡你的CDQ 但是因为这题它加的线段的长度是递增的,所以能够保证的是,之前加进去的线段,如果能够被包含的一定是完全被包含,同时也就满足了:右端点左边的右端点数 - 左端点-1左边的左端点数 = 完全包含的线段个数。 CDQ的时候这维需要人工去维护,但是因为这里已经给你排序好了,就可以直接乱

2015-08-11 19:25:45 853 3

原创 HDU 5343 MZL's Circle Zhou【后缀自动机】

对于a串可能和b串重复的部分,我们总能找到一个位置将该串分成前半段和后半段,同时使得前半段属于a串的部分达到最长,即在该串划分的位置后面的那个字母在属于a串的部分的后继为空(也就是说不能找到更长的前半段划分方式了),所以我们只要预处理以字符x为开头的b串的个数即可。 然后在A的每一个子串枚举算后面有没有以字符x为开的后继。新建图// whn6325689// Mr.Phoeb

2015-08-11 10:08:44 666

转载 数位DP专题小结--by sgx

数位DP,一句话概括,就是在一个给定区间内求出满足某中奇葩条件的数字个数,这真是奇葩题目,但是总体写起来又有一定规律性。主要可以分为以下几个步骤:确定主体框架,确定一个大方向,想想该如何设计状态;下面基本就是模板,直接DFS就行了,一位一位处理,这也是他叫按位DP的原因。数位DP代码一般都很短,不过效率挺好,解决一些竞赛中出现的问题非常有用 。如果看了这部分 ,你感觉还

2015-08-08 14:27:30 1906

原创 HDU 5354 Bipartite Graph[cdq+并查集]

这道题和2015年北大校赛第三题几乎一模一样。处理方法也是cdq+可删除并查集。 然后判断是不是二分图的方法,就是用并查集判断是否是二分图,看看我们要merge的两个点的各自与父亲相对的颜色。并查集的基本使用方法。 至于cdq和可删除并查集见链接。 当然不一定要像YYN将所有的以前信息都记录在stack中,也可以只记录两个点,然后再存几个数组表示这个点以前的信息就行。// whn63

2015-08-07 20:31:33 1183

原创 HDU 5361 In Touch

首先的想法是线段树,因为是区间更新的,所以就是一边dij一边query和update。 今天想了一想,觉得似乎不要用这么麻烦的方法。 下面证明通过某种排序方式使得每个点只要被更新过了,就必定是最近距离。因此我们可以将更新过的点压缩掉。 每个点连出去的边权是相同的,那么我们只需要按照dis[u]+cost[u]dis[u]+cost[u]从小到大排序就可以保证接下来更新的点距离一定是最小,因为

2015-08-07 14:04:10 992

原创 HDU 5358 First One

这题你必须严格地写出O(nlog(n))O(nlog(n))的时间复杂度,我们尝试了下O(nlog(n)2)O(nlog(n)^2),结果不行,而且卡常数卡得特别死。首先枚举log(SUM)log(SUM)的值,从1~33,每次固定左端点ii,然后用尺取法枚举出符合位数的SUM[l,r]SUM[l,r],这里面的sum的对数值相同,可以直接统一计算。 所以总体复杂度为O(nlog(n))O(nlo

2015-08-06 21:22:27 1223

原创 HDU 5353 Average

思路: 找到一个非零的点,然后从左贪心地走一遍,然后从右贪心走一遍 贪心就是如果现在的数是大于零的数,则给下一位; 如果现在的数是小于零的数,则下一位给我。比赛的时候就是想太多了….// whn6325689// Mr.Phoebe// http://blog.csdn.net/u013007900#include <algorith

2015-08-06 17:54:25 1052

原创 HDU 5352 MZL's City

题意: 给你n个点,m次操作,和整数k 1操作,每次可以修复k个属于x所在连通块内的点 2操作,修复x与y之间的路,双向边 3操作,给你一个p,表示有p条路被毁坏了 思路: 其实说实话,如果没有想到关键部分,个人觉得不是特别好做。 第一想法比较接近于网络流或者贪心,但是因为要删边,所以很多人觉得网络流不能解决。 之后看了题解之后

2015-08-05 09:43:51 920

原创 HDU 5321 Beautiful Set

题意:给定一个集合,含有n个数。浙理工先生和杭电先生各自有计算这个集合美丽值的方法。 浙理工先生的计算方法是: 对于这个n个数的某个排列,此排列的美丽值为这个排列所有的区间最大公约数之和。然后这个集合的美丽值为n个数的所有排列的美丽值之和。 杭电先生的计算方法是: 在这个n个数中选出k(1 ≤ k ≤ n)个数,对于某种选取方案,这种方案的美丽值为k个数的最大公约数乘上k。然

2015-08-01 23:35:55 848

poj第1200题

北京大学在线测评网站POJ第1200题的解答,已经AC通过

2013-11-30

空空如也

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

TA关注的人

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