摘要: 因为南京出了题树的分治,特意去做了一下楼教主的分治入门题。对于一棵树,先找到它的重心,然后计算一下经过根节点的合法路径有多少条,然后删掉改点,继续递归其他子树。复杂度n*logn*logn。#include#include#include#include#include#include#include#includeusing namespace std;#define For(i,forN) for(int i=0;i=0;i--)#define ForEdge(i,u) for(int i=head[u];i!=-1;i=edge[i].next)#define sf scanf#de.. 阅读全文
posted @ 2013-11-06 16:35 phk52 阅读(272) 评论(0) 推荐(0) 编辑
摘要: mark一下,免得忘了,估计是题意理解错了,写成了双连通分量,估计是单向边。未AC的代码,用的双连通分量。#include#include#include#include#include#include#include#includeusing namespace std;#define ForEdge(i,u) for(int i=head[u];i!=-1;i=edge[i].next)#define For(i,forN) for(int i=0;i Scc[Maxn];int n,m;inline void add_edge(int u,int v){ edge[etot].t... 阅读全文
posted @ 2013-11-05 19:56 phk52 阅读(435) 评论(0) 推荐(0) 编辑
摘要: 题目的意思是询问[A,B]区间内,有多少个Balanced Number,每个Balanced Number符合以下条件:将一个数按位拆分,存在一个位置mid,使得sigma(val[i]*(mid-i))=sigma(val[j]*(j-mid)) {imid}然后就是一脸数位dp的样子...一开始的想法是枚举mid,因为分析了一下,除0以为的某个Balanced Number,一定只有一个位置符合条件。然后接下来就脑残了,将数字拆成两半来dp,然后合并的时候死活合并不了。后来想了一下,瞬间觉得自己脑残了,根本就不用拆分。直接从后往前dp就行,没想好代码怎么写,就开始敲,真的很忧伤..#in 阅读全文
posted @ 2013-11-05 19:52 phk52 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 树的最小表示 阅读全文
posted @ 2013-11-04 12:06 phk52 阅读(696) 评论(0) 推荐(0) 编辑
摘要: 比赛的时候没时间去看,赛后也是看了题解才过的。题目的意思是,给定二分图,判断哪些边是无用的,也就是一定不会在最大匹配中出现。解题思路:我们可以先跑一边匹配,因为点比较多,只能用HK来做。得到一个最大匹配后,枚举每条边,判断其是否为无用边。可以分情况考虑: 设u,v为边的两端点。 一、match[u]==v (即 match[v]==u)表示这条边为当前最大匹配的一条边,那肯定是可以用边。如果不是,则转到(2)。 二、因为match[u]!=v (即 match[v]!=u )那么,可以分一下情况考虑: (1)match[u]==-1,也就是u尚未匹配,那么此时让u去匹配v,也一定不... 阅读全文
posted @ 2013-11-03 20:52 phk52 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 1003 minehttp://acm.hdu.edu.cn/showproblem.php?pid=4678这题最后两个小时一直在搞,因为我们队基本不会博弈,所以一直在卡...一个简单博弈题,可以将游戏分为两个内容:(1)只与数字相邻的数字。(2)空格和与空格相邻的数字组成的区域。然后就相当于多个同样的游戏,此时只要求出sg函数,异或起来即可。sg函数可以很容易地推出来,因为之前不了解sg函数,比赛的时候现场看的,所以一直再调,wa了很多发...1004Terrorist’s destroy http://acm.hdu.edu.cn/showproblem.php?pid=4679树形dp 阅读全文
posted @ 2013-09-02 10:03 phk52 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 第六场多校:顾昱洲出题,数学题超多 ,继续跪。。。1001 http://acm.hdu.edu.cn/showproblem.php?pid=4655 组合数学(0)、比赛的时候,CJboy搞定了这题。 觉得题目可以一搞,赛后我也重做了一下。(1)、设A为组合的所有方案数,A=a1*a2*a3*...an。然后每一个ai所带来的负面影响是min(ai,a[i-1])*(A/ai*a[i-1])。(2)、min(x,y)*(A/(x*y)) 假设x>y 那么减去的就是 A/x。题目分析到这里解法就出来了,为了使得影响更小,则需要x尽量大。推敲一下发现,最优的方案就是大小交叉的排列。然后可 阅读全文
posted @ 2013-08-12 11:12 phk52 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 多校第五场: 这场比赛打得太无力了,主要在于自己卡题太久。还有YY题又不想去做,这在现场赛是不会发生的。总觉得现在心态没有摆正,没有正视训练赛,这点需要改正。1006 http://acm.hdu.edu.cn/showproblem.php?pid=4649 概率DP(0)、之前遇到类似的题,所以看到就直接秒掉了,写得还挺顺的。(1)、将每个数按2进制拆成20位,对于每一个位单独一个DP处理概率就行了,第i位期望就是(第i为1的概率)*(1v的答案就是比值最大的负环。如果没有遇到负环,那么答案就是u->v比值最大的一条路。(2)、如果用分数规划来做,时间复杂度会很高(我没有想到什么好办 阅读全文
posted @ 2013-08-12 11:11 phk52 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 题目看似一个最短路问题,仔细分析一下会发现,问题可以转化为求区间最值问题。区间最值一直递增或者递减的话,可以直接用树状数组实现。询问可以分为两种情况:U>V 这是比较复杂的情况,然后路径只有一种:U->u->v->V,其中u>=U ,vv这些边都已经被处理了。处理U的时候,先把u=U的边用于更新[v,i]这段区间,因为所有在[v,i]内的V都可能受到u->v这条边的影响。边权为Sum[U]-Sum[v]+edge[u->v].cost。更新完成好,进行查询操作。单点查询V,区间[V,U]的最小值-(Sum[U]-Sum[V])就是答案。U#includ 阅读全文
posted @ 2013-08-04 17:10 phk52 阅读(339) 评论(0) 推荐(0) 编辑
摘要: 多校第四场:6题,打得最好的一场多校。还是CJboy给力。本场比赛我基本上没什么贡献,搞04一搞就是一下午。最后看了09觉得只有状态压缩,不知道怎么优化。1004 http://acm.hdu.edu.cn/showproblem.php?pid=4635 图论,强联通分量(0)、一开始推理的时候思路很清晰,但是接着就脑残了,没怎么细想就直接去套样例。以为得到了正确的解法,只是需要一个特判。然后就开始去写代码了。代码写着写着就发现不好写。估计卡代码卡了1个小时。其中也一直在测样例是怎么回事,当时逻辑混乱了,行动就变得缓慢。当再次看时间的时候,发现已经过去一个多小时了。其实这个时候需要冷静一下, 阅读全文
posted @ 2013-08-03 20:53 phk52 阅读(153) 评论(0) 推荐(0) 编辑