自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Anxdada -- 我等风来也等你

此博客不会维护了

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

原创 景驰无人驾驶 1024 编程邀请赛 A 题 【最短路 + 思维】

传送门 //题意: 就是n个点, 有些地下通道可以挡雨, 有些普通路面不能, 从1出发到n点, 问在保证总距离小于L的情况下, 淋雨的最小距离是多少. //思路: 我的做法是标记每条路它是地下通道还是普通路面, 然后直接跑最短路就是了(因为这样跑, 可以将所有可以到达终点的路径都可遍历一遍, 所以一定可以出一个最优结果), 然后为了区分一个淋雨距离和总距离, 需要用到两个数组分别进行标记, 总

2017-10-31 11:24:03 1182

原创 Wannafly挑战赛2 B 题 Travel 【最短路 + 思维】

传送门 //题意: 在一个环上, 有许多城市, 告诉相邻城市之间距离. 然后在这些城市中有一些传送门, 连接两座城市和一个距离, 然后给出q次询问, 问两座城市之间的最小距离. //思路: 本题的关键点在于传送门的数量很少, 只有20座, 然后观察可发现, 一个城市到另一个城市的最短距离要么就是走环上的距离, 要么就是起点通过某一个有传送门的点再到达终点, 所以我们先预处理出所有特殊点到所有点

2017-10-31 10:36:08 596

原创 板子一

二进制的高维前缀和for (int i = 0; i < k; i++) { for (int j = 0; j < (1 << k); j++) if (!((1 << i) & j)) dp[j] += dp[j | (1 << i)]; // 当前dp[i]的表示包括本身的超集的值的和 //比如dp[100] = dp[100] + dp

2017-10-22 00:28:28 311

原创 CodeChef - AMJMP Jump on Buildings 【dp + 思维】

传送门 //有一排n个高度的房子, 每次从第i个房子开始跳, 开始可以向左或者向右, 并且只能跳到比当前房子低的房子上, 并且每一次跳跃方向要和上一次相反(除了第一次). 问每个位置i可以最多跳几次. //我们通过观察得到对于当前位置我们可以向左枚举, 然后再向右枚举, 并且记录当前这个位置到其他位置可以眺到的最远距离, dp[i][j]表示从位置i跳到位置j的最大跳跃次数是多少. 并且我们要处

2017-10-22 00:08:03 351

原创 Wannafly模拟赛4 B题 Distance 【二维最大曼哈顿距离】

传送门 //重点就是那个公式, 可以发现这个公式和曼哈顿距离的公式非常相似, 所以问题就变成了再1e5点中求出最大的曼哈顿距离, 那么这道题和HDU5626几乎一样, 我们对公式|xi−xj|+|yi−yj|,拆绝对值可以得到: 正正: xi−xj+yi−yj=(xi+yi)−(xj+yj) 负负:−xi+xj−yi+yj=(xj+yj)−(xi+yi) 正负: xi−xj−yi+yj=(x

2017-10-21 23:35:16 744

原创 Wannafly模拟赛4 A 题 Laptop 【二维偏序问题 + 树状数组维护】

传送门 //这个是经典的二维偏序问题, 偏序问题也是比较难的一部分, 当上了三维以后, 就要不断用cdq分治以及一些高级数据结构来解决. 但是这道题还是比较简单的, 只是一个普通的二维偏序, 所以直接对第一维进行排序, 然后用树状数组维护第二维, 然后对于每一个插入, 我们寻找它的后缀和, (前缀和不好实现) 然后不断更新答案即可. (因为数很大, 所以需要进行离散化)AC Codeconst i

2017-10-21 23:22:42 1143

原创 HDU - 5977 Garden of Eden 【高维前缀和 + 点分治】

传送门 // 一棵树, 上面都有一个点权, 问有多少条路径满足进过的点的类型刚好有k种, // 首先这个肯定是点分治, 但是难点和POJ那题的不同处就是这个是状态, 那么就不能像POJ那题进行排序选点了, 所以我们应该要换一种比较高效的方法. 首先是k只有10, 那么我们进行状压, 那么我们要求的就是路径上这条路与( | )起来等于( 1因为我们要求的是某一条路径和已知的路径或起来的值,

2017-10-20 18:59:18 543

原创 nowcoder Wannafly挑战赛1 B 【暴力 + 思维】

传送门 //思路: 由于n只有1000, 所以n^2的算法是可以通过的, 所以我们利用前缀和来求区间异或值, 然后枚举每一个位置, 算出该位置前面有多少种异或的可能值并计数, 然后算该位置之后的异或值, 加上对应前面的数量即可AC Codeconst int maxn = 1e3+5;int a[maxn],s[maxn];int vis[maxn*maxn];void solve(){

2017-10-19 17:49:15 432

原创 nowcoder Wannafly挑战赛1 A 题 【树形dp or 点分治】

传送门 //题意不多说. //说下思路: 这道题最最简单的做法就是On的扫一遍, 然后根据奇偶的点直接算答案, 然后最近才学了点分治, 又因为这道题就是维护树上的路径问题, 所以想练练手, 于是我就用的点分治做的, 虽然是牛刀…..然后一样的路径分为过根节点的和不过的, 我们还是只讨论过根节点的, 其他的递归处理即可. 然后依然根据奇偶来, (还是一样的, xixi), 然后注意一样的要处理子树

2017-10-19 17:46:25 367

原创 树的点分治 【模板】

传送门 //就是求树上距离小于等于k的点对有多少对. //就是树的点分治模板题, 推荐ioi国家集训队论文, 里面讲解的非常清楚了. 我就不多说了. 存个板子.//树的点分治,该代码是求树上有多少对点的dis//vis代表该点是否已经当做过重心,siz是子树节点个数、mv是子树中最大的节点数int n, cnt, head[maxn], k, vis[maxn], root, maxx

2017-10-18 21:21:24 389

原创 POJ - 2152 Fire 【树形dp + 暴力 + 思维】

传送门 //题意: 现在有些城市着火了, 需要建立一定数量的消防站, 每一个点建站有一个不同的花费, 有边权, 如果一个城市没有建立消防站 , 那么至少离他一个limit的距离比较有个消防站, 不同的点limit也不同, 问满足条件的最小花费是多少? //思路: 我们并不能通过一次遍历而得到我们需要的答案. 我们可以考虑暴力判断每一个点是否可以作为当前点的依附点(即在这个点建立消防站), 那么我

2017-10-18 15:48:01 541

原创 K路归并 例题

例题传送门 //有m种商品, 每一种商品有多个值, 然后要从每一种商品中选出一个值组成一个类型, 类型值为选出的商品值的sum. 问前k小个的值是多少. //k路归并的典型例题, 把全部进行组合, 再排序输出前k个时不可能的, 因为组合达到了100^100次方个数, 但是这类题的关键在于k不大, 这里只有100, 所以每次进行两两组合时, 我们始终都只要前k个, 这样既能保证答案保存下来了, 而

2017-10-15 11:38:20 674

原创 POJ - 3162 Walking Race 【树上最远距离 + 线段树处理区间最值 + 尺取法 】

传送门 //一棵树, wc第i天从第i个节点开始跑, 记录一个最大值., 然后可以获得n个最大值, 然后从中选取连续的尽可能长的天数使得其中的最大值 - 最小值 <= m 问这个最大的天数是多少.//思路: 每个点的最大值可由树的直径求出, 然后问题转变为给你一串数字, 从中选取最长的区间, 使得其中的最大最小值之差<=m, 所以处理区间问题当然是用线段树呀, 然后进行尺取, 双指针i,j, 一起

2017-10-13 11:14:05 424

原创 HDU - 3586 Information Disturbing 【二分 + 树形dp】

传送门 //题意: 1是总部, 要切断所有叶结点和总部的联系, 每天变有个花费, 要保证总花费在小于m的情况下的最小的limit(每条边的花费要小于limit). //思路: 这个前提看似非常矛盾, 因为加入砍去两条边权为5的比砍去一条边长为6的limit的要更小一点, 但是有可能总和又要超过m,所以要综合考虑到两部分. 那么采用二分答案, 然后check当前这个答案, 如果合适就减小当前的答案

2017-10-12 22:27:15 382

原创 POJ - 3140 Contestants Division 【水题 + 思维】

传送门 //给定一棵树,问删除那条边后使得剩下的两个部分的val值差值最小, 每个点都有个点权. //思路: 直接枚举删边, 然后取最小值即可.AC Codeconst int maxn = 1e5+5;int cas=1;ll sum,dp[maxn],res;int cnt,head[maxn];struct node{ int to,next;}e[maxn*10];v

2017-10-12 19:24:22 494

原创 牛顿迭代法 求 根

这是一个求根很牛皮的一个方法, 迭代几次后精度也变得非常的高了.假设我们求√2的值, 用牛顿迭代法. 大致过程就是随便选取一个自认为离根比较近的, 离谱点也没事, 假如选x = 4, 然后不断进行如下操作: 不断令 x = x - f(x)/f’(x); (f(x) = x^2 - a(a = 2)); 所以就是: x = 4 - 14 / 8 = 2.25 ; 再一次: x = 1.56

2017-10-12 17:18:57 3013

原创 HDU - 6178 Monkeys 【树上的最大匹配 + 读入挂优化】

传送门 //题意: 给定一个树, 每个结点上可以占据一个猴子, 问最少留下多少条边使得k个猴子都占据一个结点, 并且每个猴子必须都要有另外一个有猴子的结点和他相连才行. //思路:简单的说就是,总是先满足一条边占据两个猴子是最优的, 然后这类边占据完了后, 在多一个猴子就需要再多一条边即可. 这个就是树上的二分匹配, 建图跑二分匹配肯定不行, 所以用树形dp, 或者贪心的方法On可求出最大匹配...

2017-10-12 00:05:39 380

原创 树的重心 poj - 1655 和 poj - 3107

首先知道 树的重心定义为: 找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡. 实际上树的重心在树的点分治中有重要的作用, 可以避免N^2的极端复杂度(从退化链的一端出发),保证nlogn的复杂度, 利用树型dp可以很好地求树的重心. 但是贪心的写法更好写 也更好理解, 正确性也可保证, 所以用贪心好乐..poj - 1...

2017-10-10 21:47:07 384

原创 CF 219D Choosing Capital for Treeland 【树形dp + 思维】

传送门 //题意:n个点m条边, 边是单向的, 选其中一个点使得这个点都可以到其余剩下的点, 如果走不通就将这条边反转方向, 问反转边的方向数量最少的点的编号,如果有多种可能,按升序输出所有可能. //思路: 将边的方向进行权值赋值, 正向为1, 反向为0, 那么问题就转化成了选择某个点, 使得从这个点出发到其他点的权值和最大. (想到将边的方向进行权值化就已经成功一大半了), 然后考虑一个点,

2017-10-10 11:26:17 484

原创 Gym-100781A 【树的直径 + 思维】

传送门 //题意: 给你很多颗树(当然也可能只有一棵树), 问你怎样连接起来可以使得形成的树上最远的距离最小,并输出这个距离. //思路: 当然是和树的直径有关, 然后可以知道从直径折半的地方连出去是最优的, 先用并查集求出每一棵树的直径. 然后需要讨论几种情况, 一是有一棵树它的直径本来就很长, 那么答案有可能是它, 然后(必须两棵树以上)就是直径第一长的和第二长的, 可能是一种答案, 还有一

2017-10-08 20:28:43 534

原创 欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B斜体 Ctrl + I 引用 Ctrl +

2017-10-08 20:17:43 215

原创 HDU - 2196 Computer 【树形dp必做题?】

传送门 //就是输出每个点的最远距离. 其实我来写首先会有树的直径, 那么就变得很简单了, 但是都说树形dp必做, 那么就用树形dp来好一点. dp[maxn][3]; dp[u][0] 代表u的子树下距离u最远的距离是多少. dp[u][1]代表u的子树下距离u 次 远的距离是多少. dp[u][2] 代表经过u的父亲最远可以到达的距离. 所以转移方程方程就是:

2017-10-07 20:00:41 489

原创 HDU - 1502 Anniversary party 【树形dp入门】

传送门 //一棵树, 有点权, 儿子和父亲不能同时选, 问可以得到的最大值是多少. //这就是树形dp入门题. 所以方程还是比较好写的. dp[x][0] 代表不选这个点, dp[x][1]代表选这个点. dp[i][1] += dp[j][0]; (j 是 i 的儿子) dp[i][0] += max(dp[j][0], dp[j][1]); (同样的)所以可以开始敲啦,注意处理下细节就行

2017-10-07 19:45:59 393

原创 九度 1363 欢乐打扑克 【简单水题暴力模拟】

传送门 //中文题面就不说了. 直接暴力判断, 遇到1,2加个13就是了, 然后注意两幅牌都要加, 然后输出答案时再减个13就是了. const int maxn = 1e2+5;int cas=1;int a[maxn],b[maxn];void solve(){ int n; while(~scanf("%d",&n)){ Fill(a,0);

2017-10-07 13:17:03 1053

原创 HDU - 4431 and HDU - 3391 我们一起打麻将 【dfs暴力模拟】

HDU - 4431 HDU - 3391 //这两道题是非常相似的, hdu4431要更难一点, 就以这道题来讲解, 会了这道题, 下面那道题也应该会了. 还有一道Uva的11210(题解) 很像, 但是数据相对弱很多, 不加剪枝也能过, 而hdu4431必须要剪枝, 否则会T. 思路: 1:题目意思是问你什么牌能胡, 所以34张牌一张一张枚举过去就行了 2:胡牌的方式有三种 :

2017-10-06 20:54:04 677

原创 区间扫描线处理问题

传送门 这套题的D 和 E 题都是这样的问题. D 比 E 简单点. E 需要一定的思维量 D: 给出n待处理的零件的进来的时间. 每个零件必须处理1s, 给你这个机器它1s可以同时处理的零件个数. 问最少需要几台机器. 思路: 典型的区间问题, 直接在每一个交接出处理下就行了, 然后for一遍就OKAC Codeconst int maxn = 1e6+5;int cas=1;int a

2017-10-04 00:37:56 842

原创 HDU 2054 A == B 【String 的骚操作 , string find 的应用】

传送门 先普及下find的应用, 还是挺有意思的. 在string中用find还是挺方便的. 查找字符串a是否包含子串b , 不是用strA.find(strB) > 0 而是 strA.find(strB) != string:npos string::size_type pos = strA.find(strB); if(pos != string::npos){ puts(“str

2017-10-03 23:41:50 319

空空如也

空空如也

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

TA关注的人

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