题目大意:给出一棵树,和它上面每个点的初始颜色。有两种操作,1:求从x到y一共有多少段颜色(连续相同的颜色算一个颜色段)。2:把x到y路径上都染色成z。
思路:是一棵树,求LCA路径,迅速想到树链剖分。难点是维护区间合并问题。线段树上的区间合并很常规,正常做就可以,注意一下在从一个重链上跳到另一个重链的时候的区间合并。有两种解决方案。1:在线段树中询问的时候返回一个结构体,里面存着左边颜...
分类:
其他好文 时间:
2014-09-20 14:38:48
阅读次数:
317
题目大意:给出一棵无根树。开始的时候你在1号节点。有两种操作:1.求你的位置到x的位置的距离,然后你走到x点。2.把第x条边边权改成y。
思路:裸地树链剖分。当然正解不是树链剖分,是DFS序+树状数组。没时间想太多就写了个链剖。
CODE:
#include
#include
#include
#include
#define MAX 200010
#defi...
二叉树的最低公共祖先 代码(C)本文地址: http://blog.csdn.net/caroline_wendy二叉树的最低公共祖先(lowerest common ancestor), 首先先序遍历找到两个结点的路径, 然后根据链表路径找到最低的公共祖先.代码:/*
* main.cpp
*
* Created on: 2014.6.12
* Author: Spike...
分类:
其他好文 时间:
2014-09-18 16:36:04
阅读次数:
162
前言 RMQ: 数组 a0, a1, a2,..., an-1, 中求随意区间 a[i+1], a[i+2], ..., a[i+k] 的最小值 LCA: 求二叉树中两个节点的最低公共祖先 本文将证明这两个问题能够相互归约为还有一个问题。证明 先通过一个简单的样例来说明问题。见下图: 求 [7...
分类:
其他好文 时间:
2014-09-18 16:24:44
阅读次数:
144
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586
题意:一棵有边权的树,问任意两点间的长度是多少。
思路:做LCA题目看到的这道题,就用LCA做了,其实只用LCA的递归部分就能做这道题了。
用一个数组dis记录根节点到每个节点的距离,则任意两节点a、b间的距离就是dis[a]+dis[b]-2*dis[lca(a,b)]。
我用ve...
分类:
其他好文 时间:
2014-09-15 22:52:29
阅读次数:
243
题目大意:给定一棵无根树和一个序列,在这个序列上依次遍历,求每个点的访问次数(最后一个点的访问次数要-1)
树链剖分的裸题……考场上我还是一个弱渣,啥也不会,暴力得了50分,剩下两道题爆零了。。。而且30W深搜爆栈,人生第一次手写了系统栈。。
回来因为这题的原因去学了树链剖分 结果没学明白 每条重链单独开了一棵线段树 常数大的要死
高一时写的代码。。。还是别看了,拿去对拍可以,阅读性欠佳
...
分类:
其他好文 时间:
2014-09-07 16:04:57
阅读次数:
591
LCA算法:LCA(Least Common Ancestor),顾名思义,是指在一棵树中,距离两个点最近的两者的公共节点。也就是说,在两个点通往根的道路上,肯定会有公共的节点,我们就是要求找到公共的节点中,深度尽量深的点。还可以表示成另一种说法,就是如果把树看成是一个图,这找到这两个点中的最短距离...
分类:
其他好文 时间:
2014-09-07 10:56:34
阅读次数:
234
http://acm.hdu.edu.cn/showproblem.php?pid=2586题意:给定一个图,有M个询问。每一次询问为询问u,v两个点的距离为多少?题解:LCA问题。 1 #include 2 #include 3 #include 4 #include 5 #in...
分类:
其他好文 时间:
2014-09-05 22:19:12
阅读次数:
320
How far away ?Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5492Accepted Submission(s): 2090Prob...
分类:
其他好文 时间:
2014-09-05 15:41:21
阅读次数:
222
题目链接:点击打开链接
题意:
给定n个点m条边的无向图
下面m行是(u,v) 和边权
下面q个询问
(u, v)
在这两个点间找一条路径使得这个路径上最大的边权最小。
数据保证询问的2个点之间一定存在路径
思路:
求瓶颈路,最小生成树跑一下。
然后求lca的代码里加入边权。
因为要使得最大的边权最小,所以用最小生成树的krusal算法,
正确性证明:
我们现在有...
分类:
其他好文 时间:
2014-09-05 14:27:31
阅读次数:
213