- 博客(79)
- 资源 (3)
- 收藏
- 关注
原创 csu1580 树形依赖背包模板题
题意有一辆能载客m的车,有n个人,然后第i个人上车的条件是第a[i]个人要上车,问最多能上几个。(题意很简单吧。)。思路首先要明确一点,这些人的依赖可能会成环,也就是说一群人要一起上才行,不存在你上我不上的情况,面对这个我们就要用有向图的强联通分量进行缩点了,缩完点之后就得到了森林(很多根节点)。子树是依赖于根节点的,这就变成了典型的树形依赖背包了,另外想着
2015-10-08 18:38:41 558
原创 zoj2616 最小割
题意:政府拥有30万个稀有资源,让两个公司竞争,购买的方式是这样的:每个公司的每个订单都选择这30万个资源的一个子集来购买,然后开出一个价钱。这个子集的大小不会超过32,每个公司至多下3000个订单,并且一个公司自己的订单包含的资源不会重复,一个资源不能被两个公司共享。由于两家公司购买方案和出价不同,因此政府想通过合理的安排使获益最大。题解
2015-10-03 02:29:31 397
转载 next_permutation函数
这是一个求一个排序的下一个排列的函数,可以遍历全排列,要包含头文件下面是以前的笔记 与之完全相反的函数还有prev_permutation (1) int 类型的next_permutation int main(){ int a[3];a[0]=1;a[1]=2;a[2]=3; do{cout} while (next_permutat
2015-09-24 21:29:51 376
原创 gym Learning to Add 一个水题 结果看错题意了
题意:给你不超过五个数,然后挨个加起来,但是每加一个数得到的结果可能会把各个位弄乱,问到最后最大的结果是什么?例子:542 1 3 3 6过程:• 0 + 42 = 42• 42 + 1 = 43• 43 + 3 = 46• 46 + 3 = 94• 94 + 6 = 100思路:我擦,我没看到题目中的one by one,想了一个小时,结果回头
2015-09-24 21:28:37 367
原创 hihocoder1233 搜索+状态压缩 我是菜比
题意:有n个卡槽,放有体积不同的n个空盒子,每次你可以移动一个空盒子到相邻卡槽,但前提是相邻卡槽若已经有空盒子,那么要移动的空盒子体积必须小于已有的空盒子,问要移动多少步才能使得从左到右,每个卡槽空盒子的体积递增。思路:就是搜索,但是需要想出一种办法来表示当前搜索的状态。一开始我自己想的时候是想每个位置给他来个n位的二进制,来记录这个位置上面有哪几个盒子,但是想了想这样记录是不太好做的,每
2015-09-22 23:12:35 672
转载 hdu 5452 Minimum Cut
题意:给定图G的一颗生成树,然后求最小割边集的大小,要求割边集中要有且仅有一条生成树边考虑给定的生成树,求出要把某个子树和其父节点分开的最少割边数,然后枚举除了root以外的最小值+1就是答案了。 转换为求将每个子树要分开的最小割边。就是求这颗子树连接到子树外的边的数量。 如果一条边e(u,v)不是树边,那么对于u和v来说它连接到非它本身子树的另外子树的贡献是1,如果要将这个点和其
2015-09-22 11:21:47 604 2
原创 hdu5458 2015沈阳赛区网络赛 树链剖分+并查集
题意:给你个图,然后给你m条边,然后有两种操作,第一种是1,删除两个点之间的一条边,第二种是2,问两个点之间的稳定性(稳定性的定义是删除一条边后这两个点就会不连通,这样的边有多少条它的稳定性就是多少,如果这样的边有无数条的话那么就是0),题目保证删到最后这个图也是连通的。思路:一开始我想的是如果两个点是一个连通块里的两个点肯定是稳定性是0,然后不在一个连通块里的点的稳定性就是缩点后两个点的路径
2015-09-21 23:01:14 1347
转载 hdu2196
题意:给出一棵树,求离每个节点最远的点的距离思路:把无根树转化成有根树分析,对于上面那棵树,要求距结点2的最长距离,那么,就需要知道以2为顶点的子树(蓝色圈起的部分,我们叫它Tree(2)),距顶点2的最远距离L1还有知道2的父节点1为根节点的树Tree(1)-Tree(2)部分(即红色圈起部分),距离结点1的最长距离+dist(1,
2015-09-18 15:37:41 647
原创 hdu2196 树的直径或者树形dp
题意:输出一个树的每个点到其他点的最大距离。明显树的直径有这样一个结论,树上每个点能搜到的最远的点一定是该树直径的两个端点之一,所以先随便搜一遍找到一个端点,然后再从这个端点开始搜到另一个端点,再从这个端点搜一遍,后两边搜索时更新每个点到其他店的最大距离即可。网上还有用树形dp做的,说是经典树形dp,我今天做做专题找题时因为看网上说这题归到了经典树形dp才填上的,结果用树的直径水了给。我再
2015-09-17 21:51:05 912
转载 hdu4607 树的直径
对于一棵无向树:任意点出发,找到最远点,设这个为起点,从起点出发找到最远点为终点这条路就是直径 [cpp] view plaincopy#include #include #include #include #include using namespace std; #de
2015-09-16 23:26:51 330
转载 CCF 201403-4 无线网络 (二维最短路)
转自:http://blog.csdn.net/u014679804/article/details/48212851#comments问题描述 目前在一个很大的平面房间里有 n 个无线路由器,每个无线路由器都固定在某个点上。任何两个无线路由器只要距离不超过 r 就能互相建立网络连接。 除此以外,另有 m 个可以摆放无线路由器的位置。你可以在这些位置中选择至多 k 个增设新
2015-09-16 11:03:14 621
原创 hdu3374 最小最大表示法kmp求循环节
题意:一个字符串的同构串中字典序最小的跟字典序最大,都要求输出起始下标最小的,然后这两个同构串在所有同构串中出现的次数。求字典序最小最大直接最小最大表示法。出现次数的话,如果该字符串能多次出现一个同构串,那么这个字符串的循环节要大于1,不然就只能出现一次,所以用kmp求一下循环节就行了#include #include #include using namespace std;cons
2015-09-16 10:32:58 537
原创 hdu5446 lucas+crt
题意:一个大的组合数模一个大的合数,这个合数可以拆成互不相同的质数。众所周知,大的组合数模一个素数可以用lucas定理做,模合数,只需要用这个组合数模这个合数的质因数,再用crt反推回去就可以得到答案。http://blog.csdn.net/acdreamers/article/details/8037918http://blog.csdn.net/acdreamers/arti
2015-09-15 20:50:25 494
转载 hdu5442 最小最大表示法+kmp
转自:http://blog.csdn.net/u014679804/article/details/48462413题目大意:给一个字符串,求的循环最大表示,以及方向。1、可用最大表示法求出顺时针的最大表示的最小开始位置,记为p1。利用该位置求出顺时针的最大表示字符串,记为s12、然后将字符串倒置,再用一次最大表示法。注意此时求出来的位置p其实是下标最大的开始
2015-09-15 19:46:36 342
转载 仙剑六画面分析
玩仙剑也是玩了很久了,从小孩子玩成大人,对于游戏的热爱也让我走向游戏行业,但是今天,我要从专业的角度,评一评,说一说你的画质。画质不是主要的,没有画质,那也是万万不行的,尤其是这样子追求体验的游戏,但凡单机大作,画面都是一个很大的课题...首先我说一下你们的模型,从4代到6代,面数有明显的增加,但是只有面数增加,形状几乎没有变化,就好像给仙剑4的模型加了个smooth,如图:(原图
2015-09-02 17:49:27 650
转载 大牛isap模板
转自http://blog.csdn.net/u013368721#include #include #include #define clear(A, X) memset (A, X, sizeof A) #define copy(A, B) memcpy (A, B, sizeof A) using namespace std; const int maxE
2015-08-27 23:10:30 324
原创 spoj287 经典网络流题目,二分+网络流判定方案
题目大意:有n个房子,m条边。编号1的点是网络中心。现在给你k个房子,每个房子都要由一根网线连往网络中心。连线有两个规则:1、房子连到网络中心的一根网线必须完整,只有一个颜色。2、边上的所有网线必须颜色都不一样,边是两个房子之间的边,比如3->2->1就经过了两个边求:最少用多少个颜色。具体看题目。思路:肯定是最大流没错,关键还是建图。网上题解一句话说“颜色的数量取决于网络流中各条边中
2015-08-27 23:05:12 715
转载 c++中map的排序
map是用来存放键值对的数据结构,可以很方便快速的根据key查到相应的value。假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区分),我们用map来进行存储就是个不错的选择。 我们这样定义,map,其中学生姓名用string类型,作为Key;该学生的成绩用int类型,作为value。这样一来,我们可以根据学生姓名快速的查找到他的成绩。 但是,我们除了希望能够查询某
2015-08-27 11:58:01 1053
转载 后缀数组经典题---不可重叠最长重复子串 poj1743
内容也是别处看来的,就不写原创了题意:有N(1 1.长度至少为5个音符。 2.在乐曲中重复出现。(可能经过转调,“转调”的意思是主题序列中每个音符都被加上或减去了同一个整数值) 3.重复出现的同一主题不能有公共部分。思路:后缀数组。求出任意相邻音符的差值,然后把问题转化为 不可重叠最长重复子串,用后缀数组来做。先二分答案,
2015-08-26 22:15:18 974
原创 我个沙茶,居然不会写基数排序
http://baike.baidu.com/link?url=N66o-8p7EilH6e4W-0wLF3PdCg9tfSzBLgHpwpxDpnniCBKpwIRKPcVYlwC7QHdW-_t1w3BpNmXxjljwiToEoqint maxbit(int data[], int n) //辅助函数,求数据的最大位数{ int d = 1; //保存最大的位数 int
2015-08-26 01:14:45 509 2
原创 后缀数组(一)
o(︶︿︶)o 唉,也是为了应付知识储备太少,万一遇到了类似的题不知道用啥算法就蛋疼了,所以来恶补一下这些东西。囤一发模板,详细讲解请见2009罗橞骞的论文《后缀数组--处理字符串的有力工具》,基本网上所有的讲解都是来自这篇文章,代码也是这篇论文上的,就不说啥了。#includeusing namespace std;#define MAXN 100010char s[MAXN]
2015-08-26 01:09:20 641
原创 两道利用网络流来验证是否存在一种方案满足要求的题目 woj1124 sgu326
woj1124题意:说有n支队伍,要互相进行一些场次的比赛,一共还有m场没有比。给出每个队的总分以及m场的比赛情况。问是否有方案安排这m场比赛的结果,使得第n支队伍最后的总分大于其他任一支队伍的总分。一场比赛赢了得两分,输了0分,平了1分。(1思路:1.既然让你随便安排,那么先让第n支队伍的比赛全赢了,让第n支队伍的总分最大化,这样最稳,如果这时已经有队伍的总分大于第n支,那么怎么安排其余
2015-08-19 23:15:57 640
原创 hdu4322 candy 费用流
题意:n个糖果,m个孩子,给一个矩阵like[i][j]表示第i个孩子喜欢第j个糖果。 如果孩子拿到他喜欢的糖果,那么他将会增加k个快乐度,拿到不喜欢的,增加1。 如果孩子i的欢乐值大于B[i],那么他就是开心的。 问,能否有一种分配方案,让所有孩子都开心,有输出yes,没有no。思路:(讲的不好请见谅,大牛勿喷) 起初是看了一个大牛的一篇关于网络流建模
2015-08-19 00:15:26 992
原创 poj3281 dining 经典最大流建模方法
题意:有f中食物和D种饮料,每头牛只能享用一种食物和饮料,每个食物跟饮料也只能被一头牛享用。现在有n头牛,每头牛都有自己喜欢的食物种类列表和饮料列表,问最多能使几头牛同时享用到自己喜欢的食物和饮料。f,d,n都是一百以内的。思路:就不说一开始的想法了,是最近学习的最大流的建模里面的新的方法。之前做过几道题,比如poj2391这道,它是比较一般的左边一些点代表着供应,2391这道题就是每个点
2015-08-17 23:58:08 809
原创 zoj3164
题意:a想要买饼干,饼干店有n中饼干,a对每种饼干有个购买上限ki,若为0,就是没有上限,而且她对每种饼干有喜爱度ei,买这种饼干得到的快乐感为ki*ei,a只有d钱。而且有些饼干的口味是一样的,a只会选择买其中的一种。问花完d钱a得到的最大的快乐感。数据范围:1《=n,d思路:其实就是一个多重背包,但是要把分组的那些单独处理出来,当作01背包来做。即在多重背包的过程中用一个数
2015-08-16 00:38:25 623
原创 zoj3344 第一类斯特林数+java大数
题意:有个游戏,两个人玩。有n个卡片,洗牌后放入编号为1到n的盒子里,然后两个人轮流做如下操作,拿出盒子中编号最小的卡片k,然后再去编号为k的盒子中拿出卡片,依次类推,直到没有卡片可拿为止。拿走最后一张卡片的玩家获胜。求先手能够在K次操作以内获胜的概率,(以分数形式输出)1思路:其实就是第一类斯特林数,第一类Stirling数 s(p,k)s(p,k)的一个的组合学解释是:
2015-08-15 19:16:23 798
原创 poj3465 贪心+优先队列
题意:你跟一个boss作战,回合制的,你先boss后,boss只会攻击,且每回合造成的伤害为a[i],而你有三种动作,第一是攻击boss,对它造成x点伤害,第二是对boss的该回合攻击免疫,第三是恢复y点生命值,如果n回合后boss没死,你输,如果中途你的生命值掉到0你输,如果输了输出对boss造成的最大伤害,如果赢了输出最少的回合数。难度:中档题。思路:首先是贪心的思路,我们先每次都做攻
2015-08-15 16:05:29 620
原创 zoj3279 简单二分
随意在书上挑了道题,结果是道简单的二分题,随手写了。题意:有1到n 那个level 每一个level有a[i]只蚂蚁两种操作 p a b 把第a个level的蚂蚁数量改成bq a 查询第a只蚂蚁在哪个level里。思路:要查的第x只蚂蚁,满足a[1]+a[2]+....+a[i-1]代码:#include#include
2015-08-13 23:50:43 412
原创 sgu138状压dp用dfs来统计
题目大意:有一个大小为N * M的蛋糕,蛋糕上面有k根蜡烛,现在要求你在蛋糕上面铺1 * 2和2 * 1的巧克力 使得所铺的巧克力最少,且蛋糕上面没有空余地方可放巧克力了(只存在1 * 1的没铺的方格)解题思路:1 * 1的空闲方格由三行决定,上一行,当前行和下一行,如果只考虑两行的话,就比较难了 所以我们用dp[i][s1][s2]表示第i行的状态是s1,第i + 1行的状态是s
2015-08-13 22:09:30 475
原创 ural1039 树形dp
一道很简单的树形dp,之前也是没有做过,从简单的开始做起。题意:就是说公司要开个party,每个人都有一个欢乐值,条件是一个人如果到场那么它的直系上司不能在,问最大的欢乐值。思路:建棵树,也可能是很多棵树,然后dp[i][1]表示第i个人的上司在,0代表上司不在。那么转移方程是dp[i][0]=max(求和(dp[child][1])+w[i],求和(dp[child][0]))d
2015-08-12 15:12:35 382
原创 hdu5360优先队列
priority_queue优先队列容器与队列一样,只能从队尾添加(插入)元素,从队头(队首)删除元素。但他有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按先进先出的原则进行,而是将当前队列中最大的元素出队。这点类似与给队列里的元素进行了由大到小的顺序排序。元素的比较规则默认为按元素的值的由大到小排序;当然,可以重载“使用priority_queue需要声明头文件#in
2015-08-08 10:26:47 472
原创 hdu 5296 lca+dfs应用,lca倍增法模板
题目大意:给出一棵树,每个边都有一个权值,现在有一个空的集合,两种操作,1 x吧x节点放到集合中(如果还没放入),2 x把x节点从集合中拿出来(已放入)。每次操作后输出最小的边权和,保证这些边可以将这些点连起来。首先明确一点的是,两个点x,y最短的路径肯定是经过两点的lca的,而新添一个点u之后,也就是这个点要连到这条链上去的话,是有下面的公式的:首先是u到x的距离,dis[u]+dis[
2015-07-25 20:10:01 496
原创 noi 2006 最大收益 最大权闭合图转最小割转最大流
题意:一个公司有n个可以建造通讯战的地方,建造成本分别为pi,然后第i个公司会选择使用通讯站ai与bi,使用费用是ci,然后问这个通讯公司怎么建站能够获利最大。(净获利=总收益-总成本);网上看到一篇题解,直接说这是个最小割,求最小割然后总收益-最小割就是了。这种题解就是一点用也没有,为什么是最小割,总得解释解释吧,撂下结论就跑了,这种题解写来何用。之后查了一篇国家集训队的论文《最小割模型
2015-07-24 17:37:22 648
原创 2015多校第二场 1004( Delicious Apples )
题意:有一条圆形的路,你的仓库在0点,这条路长l,然后有n个苹果树,每个数的坐标是xi(顺时针),每棵树上有ai个苹果。你有个篮子,能装k个苹果,问你用这个篮子将所有苹果装回仓库所走的最短路为多少?1≤n,k≤105,ai≥1,a1+a2+...+an≤1051≤L≤1090≤x[i]≤L请特别注意上面的苹果个数的条件。因为我的学长 就是从这个条件成功做出了这道题,orz!
2015-07-23 20:58:32 712
原创 最大流的理解以及dinic模板 poj1273
增广路以及残留网络的定义不再赘述了。算导上说的很清楚,证明也有,看懂了就知道怎么求最大流了。而算导上提到的FF方法以及ek算法的伪代码中都是将流与残留容量分开储存,其实代码实现的时候我们只需存正反向弧的残留容量即可。然后是对残留网络的一些理解,残留网络中的反向弧是怎么来的?残留网络的每条边都是这条有向边的残留容量,而残留容量又由公式cf(u,v)=c(u,v)-f(u,v)得到,那么对
2015-07-23 11:43:23 2225 2
原创 HDU5044 2014上海网络赛1003 tree
TreeTime Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1024 Accepted Submission(s): 188Problem DescriptionYou are given a tre
2015-07-03 16:56:10 815
原创 poj1330 LCA 屯个模板
//给一棵树,最后问两个点的lca是谁。#include#include#include#include#include#includeusing namespace std;const int maxn=10005;struct node{ int v,next;};node edge[maxn];int head[maxn],cnt;void add(in
2015-07-03 15:41:03 908
转载 uvalive 6525 Attacking rooks
题意:有个nXm的棋盘,"."表示可以放车(车是可以管一行和一列的,也就是它所在行和列只能有它一个),“X"表示墙,然后问你最多可以放多少个车,使得他们互相不会攻击。思路:车是可以管一行一列,但是有x的话就会把它管的行和列截至在X处,然后我们就可以把每个行中的连续的点分块编号,对列做同样的操作,然后行的块号当X集合,列的块号当Y集合,然后对每一个“。”所在的行块号和列块号之间加一条边,然后求二
2015-07-02 21:05:12 587
原创 二分图最大匹配,最小路径覆盖,最小点覆盖,最大独立集,最小边覆盖与建图方法
前言: 有自己写的,有摘的别人的,前面是摘的,也是无心整理,出错是难免的,反正我都不会证明,智人见智,别被我误导了。§1图论点、边集和二分图的相关概念和性质点覆盖、最小点覆盖点覆盖集即一个点集,使得所有边至少有一个端点在集合里。或者说是“点” 覆盖了所有“边”。。极小点覆盖(minimal vertex covering):本身为点覆盖,其真子集都不是
2015-07-02 01:10:09 7808
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人