11 2013 档案

摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4776 参见大牛题解http://blog.csdn.net/dslovemz/article/details/15290899。 自己比赛的时候除了枚举每一位之外,就没什么想法了,看了大牛题解,思路才略 阅读全文
posted @ 2013-11-11 18:22 phk52 阅读(462) 评论(0) 推荐(0)
摘要:因为南京出了题树的分治,特意去做了一下楼教主的分治入门题。对于一棵树,先找到它的重心,然后计算一下经过根节点的合法路径有多少条,然后删掉改点,继续递归其他子树。复杂度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 阅读(282) 评论(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 阅读(444) 评论(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 阅读(324) 评论(0) 推荐(0)
摘要:树的最小表示 阅读全文
posted @ 2013-11-04 12:06 phk52 阅读(725) 评论(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 阅读(300) 评论(0) 推荐(0)