2014年3月25日

HRBUST 2064:萌萌哒十五酱的宠物~(最近公共祖先LCA)

摘要: 题意:一个n个点的树,询问某两点之间的简单路径,问路径上任选三边能否组成一个三角形。 N= A[i-1] + A[i-2];观察可以发现其增长类似斐波那契,又因为权值=45个时,必然可以组成三角形。剩下的,就暴力一下就好了。确定路径边的个数的方法是深度结合lca来做。暴力的话就是两点向上攀,直到公共祖先。然后sort一下,然后检查是否存在 A[i] #include #include using namespace std;#define N 100010struct BCJ{ int fa[N]; void init(int n) { for (int i = 0;... 阅读全文

posted @ 2014-03-25 19:47 ShineCheng 阅读(212) 评论(0) 推荐(0) 编辑

HRBUST 2072:萌萌哒十五酱的礼物~(树,字典树)

摘要: 题意:n个点的一棵树,树的边上有权值。一条路径的权值定义成这条路径上所有边的权值的xor。问所有路径的最大权值是多少。思路:首先,树上任意两点之间的路可以表示成 这两点到根节点的路- 其最近公共祖先到根节点的路*2.那么这里如果是用xor操作,重复的那部分正好就没了。深搜一边,得出所有点到根节点的权值,这样问题就边成了n个数字,将其中两个xor,问得到的最大值是什么。然后这里我卡住了……实际上做法非常……用字典树记录所有这些树(二进制),然后对每一个数,去找现在存在的和它xor之后答案最大的那个数。暴力完n个数就得到答案= =……坑:深度太深爆栈了。只能自己写。用栈模拟了递归,但感觉又不像是深 阅读全文

posted @ 2014-03-25 19:04 ShineCheng 阅读(230) 评论(0) 推荐(0) 编辑

导航