hdu
cadongllas
这个作者很懒,什么都没留下…
展开
-
BC#76 C_HDU5647 DZY Loves Connecting 树形DP
比赛的时候没想出来,现在发现还是一个经典的树形DP首先用size[i]表示节点i对答案的贡献同时为了推倒方便,用f[i]表示以i为根的子树的数目那么我们考虑当i的子节点j加入时,对答案的贡献首先,加入j时,会有f[i] * f[j]个新的子树加入,那么计算对答案的贡献之前的size[i]已经被计算过一次,加入j之后,对于答案的贡献是size[i] * f[j]此外,还需要统原创 2016-03-21 15:00:15 · 339 阅读 · 0 评论 -
HDU 2819 Swap 最大匹配问题
交换图的某些行或者是某些列(可以都换),使得这个N*N的图对角线上全部都是1.建立二分图,左边表示的是横坐标,右边表示纵坐标,所以范围都是1~N,然后如果a[i][j]是1,那我们就从X的i向Y的j引一条边,然后直接求最大匹配数即可#include #include #include #include #define rep(i, j, k) for(int i原创 2016-09-11 23:11:16 · 216 阅读 · 0 评论 -
HDU 4185 Oil Skimming 匈牙利
用1*2的木板覆盖矩阵中的‘#’,(木板要覆盖的只能是‘#’),问最多能用几个木板覆盖很典型的二分匹配问题,将矩阵中的点分成俩种,下标i+j为奇数和偶数俩种,即把矩阵当成一个黑白棋盘,然后用匈牙利二分匹配#include #include #include #include #include #define rep(i, j, k) for(int i = j原创 2016-09-11 23:15:00 · 257 阅读 · 0 评论 -
HDU 3829 Cat VS Dog
有p个小朋友参观动物园,动物园里面有两种动物,分别为猫和狗。规定一个小朋友喜欢猫就讨厌狗,喜欢狗就讨厌猫。现在管理员要移走0一些动物,当然,移走也是有条件的。比如一个小朋友喜欢猫3,讨厌狗4.那么移走狗4,这个小朋友就会非常开心。同样,如果移走猫3,小朋友就会很不高兴。现在问怎么样才能使开心的小朋友的人数最多二分图最大独立集#include #include #incl原创 2016-09-11 23:16:12 · 277 阅读 · 0 评论 -
HDU 2255 奔小康赚大钱 km算法
村里要分房子,有N家老百姓,刚好有N间房子。考虑到每家都要有房住,每家必须分配到一间房子且仅仅能分配到一间房子。另外, 村长为了得到最大利益,让老百姓对房子进行估价因为不同房子的价值是不同的,所以只考虑匹配数是不可以的,要用km算法或者网络流求最大匹配数值#include #include #include #include #define rep(i, j, k)原创 2016-09-11 23:32:50 · 382 阅读 · 0 评论 -
HDU 3488 Tour 最大完美匹配
有N个城市,M条街道,每条街道是单向的,现在要你设计多条路线覆盖所有的点,每条路线都是一个环,并且每个点仅能被一条路线覆盖且只经过一次因为是圈,所以每个点的入度和出度应该都是1,故将一个点拆成两个点,入度点和出度点,可以想到,网络流的过程就是度数的流,因此可以建图跑最大匹配#include #include #include #include #define rep(i原创 2016-09-11 23:35:21 · 263 阅读 · 0 评论 -
hdu 3488 二分图完美匹配
题意:有N个城市,M条街道,每条街道是单向的,现在要你设计多条路线覆盖所有的点,每条路线都是一个环,并且每个点仅能被一条路线覆盖且只经过一次每个点一个入度一个出度,拆点然后二分图,用km跑完美匹配就可以得到路线#include #include #include #include #define rep(i, j, k) for(int i = j; i <= k; i++原创 2016-09-03 14:29:17 · 268 阅读 · 0 评论 -
hdu 1754 树状数组
题意:单点修改,区间查询最大值用线段树是可以轻松解决的,这题我是用树状数组写的对于每个lowbit的区间维护一个最大值,然后当单点加的时候,然后到后面也都一起加#include #include #include #include #define rep(i, j, k) for(int i = j; i <= k; i++)#define maxn 200009原创 2016-09-03 14:59:20 · 214 阅读 · 0 评论 -
hdu 1166 树状数组
题意:单点修改,区间求和树状数组入门。。#include #include #include #include #define rep(i, j, k) for(int i = j; i <= k; i++)#define maxn 200009using namespace std;int n, a[maxn], f[maxn];int lowbit (in原创 2016-09-03 15:21:42 · 196 阅读 · 0 评论 -
HDU 1281 棋盘游戏 二分图
在一个N*M大小的棋盘中,有K个空位置,(1)在这些空位置上最多能放多少的“车”(一行或一列最多一个)。(2)空位置中,有的位置若不放“车”,就无法保证放尽量多的“车”,这样的格子被称做重要点,求重要点的个数可以看成行与列的二分匹配问题,因为每行每列至多只能放一个棋子#include #include #include #include #define rep(原创 2016-09-11 23:06:54 · 247 阅读 · 0 评论 -
HDU 4280 Island Transport 网络流
有N个岛屿,M条路线,每条路都连接两个岛屿,并且每条路都有一个最大承载人数,现在想知道从最西边的岛到最东面的岛最多能有多少人过去可以看出是最大流的问题,而且源点汇点也都给出了,可以用dinic解决#include #include #include #include #include #define rep(i, j, k) for(int i = j; i <= k原创 2016-09-11 21:41:16 · 213 阅读 · 0 评论 -
HDU5649 DZY Loves Sorting 二分+线段树
上周六BC的最后一道题感觉还是挺经典的做法的,首先因为是n的全排列,所以可以直接二分答案然后用线段树判断,好吧其实bc的题解说的已经很清楚了这是一道良心的基础数据结构题。我们二分a[k]a[k]的值,假设当前是midmid,然后把大于midmid的数字标为11,不大于midmid的数字标为00。然后对所有操作做完以后检查一下a[k]a[k]位置上是00还是11。因为原创 2016-03-22 22:29:17 · 621 阅读 · 0 评论 -
HDU5288 OO’s Sequence 二分
开始刷2015多校对抗赛的第一题题目要求所有子序列中没有其约数的个数显然需要nlogn的算法,对于一个数,我们需要求出最大的子序列,保证这段序列中没有其约数,然后利用乘法原理求解所以就很容易想到用a,b数组分别记录s[i]左右最近的约数的位置下面考虑求出a,b数组首先约数是没有任何办法的,必须用根号n的代价枚举,然后只需要预先记录下每个数字出现的位置,然后利用位置下标的递增性二原创 2016-03-23 23:13:47 · 223 阅读 · 0 评论 -
HDU5289 Assignment RMQ / 单调队列
要求最大值最小值之差小于k的子序列的个数本题有两种方法求解:方法一:单调队列暴力枚举区间右端点,然后利用左端点不减的性质解决题目。具体就是使用两个单调队列分别维护最大最小值上次用这个数据结构还是高一,当时还十分业余,这次用deque好好的实现了一下。首先注意单调队列这种数据结构,利用单调性有着十分优秀的性质,合理利用可有大作用。以本题的最大值优先队列维护区间最大值为例原创 2016-03-23 23:20:24 · 875 阅读 · 1 评论 -
hdu 1711 Number Sequence kmp模板
给两个序列,问第二个在第一个出现了多少次kmp模板不解释#include #include #include #include #include #include #define rep(i, j, k) for(ll i = j; i <= k; i++)#define ll long long#define maxn 1000009#define inf 0x原创 2016-09-09 15:27:09 · 186 阅读 · 0 评论 -
hdu 1686 Oulipo kmp
给两个字符串,问第一个在第二个出现了多少次kmp#include #include #include #include #include #include #define rep(i, j, k) for(ll i = j; i <= k; i++)#define ll long long#define maxn 1000009#define inf 0x7fff原创 2016-09-09 15:28:53 · 312 阅读 · 0 评论 -
hdu2087 剪花布条 kmp
给定一段长布条,然后给一个短布条,问从长的上能减下来几段短的布条还是kmp要注意的是,匹配位置是不能重叠的,所以匹配后,指针需要清零#include #include #include #include #include #include #define rep(i, j, k) for(ll i = j; i <= k; i++)#define ll long lo原创 2016-09-09 15:34:03 · 274 阅读 · 0 评论 -
hdu 3746 Cyclic Nacklace kmp
给一个字符串,问在首位最少添加多少个字符能使得原字符串循环需要理解next数组,画个图理解就好,用n - next[n]求出循环节然后输出len % p#include #include #include #include #define rep(i, j, k) for(int i = j; i <= k; i++)#define maxn 100009using原创 2016-09-09 15:41:51 · 238 阅读 · 0 评论 -
HDU 1358 Period kmp
一个字符串,从头到某个位置,字符串的前缀最多重复了多少次用next数组做,对于每个位置用i - next[i]求出当前可能的循环长度,然后看能否整除即可#include #include #include #include #define rep(i, j, k) for(int i = j; i <= k; i++)#define maxn 1000009using原创 2016-09-10 23:27:22 · 288 阅读 · 0 评论 -
hdu 4614 线段树+二分
题意:n个花瓶,m个操作,花瓶里面有的有花,有的是空的。1操作是从a开始往右放b朵花,花瓶有了的不放,跳过,直到a右边都放满了花,多余的扔了。输出本次放花的起始位置求和操作可以用线段树解决,操作1的放置的起始位置,通过二分求就可以#include #include #include #include #include #define rep(i, j, k) for(in原创 2016-09-03 15:28:48 · 232 阅读 · 0 评论