题意: 树上路径之间的点统一加减k,查询某点的值解法:不会LCA的解法,于是用树链剖分了,比较简单的剖分,然后用线段树维护就行了,相当于区间更新,单点查询,查询点 i 的值时,只需在线段树中查询pos[u]位置的值即可。加IO优化900+ms代码:#include #include #include...
分类:
其他好文 时间:
2014-10-07 17:16:13
阅读次数:
221
非常裸的模版题,只是Tarjan要好好多拿出来玩味几次非常有点巧妙呢,tarjan,大概就是当前结点和它儿子结点的羁绊WA了俩小时,,,原因是,这个题是多数据的(还没告诉你T,用scanf!=EOF来控制结束),更重要的是和这个和Codeforces不一样,Codeforces的多组数据好像会又一次...
分类:
其他好文 时间:
2014-10-06 16:55:20
阅读次数:
194
http://poj.org/problem?id=1986题意:一棵树里找到两个点的距离。(不用考虑不联通的情况)题解:LCA模板题。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 ...
分类:
其他好文 时间:
2014-10-06 11:12:10
阅读次数:
286
题意:N个点,形成一棵树,边有长度。M个询问,每个询问(a,b),询问a和b的距离思路:模板题,看代码。DFS预处理算出每个结点离根结点的距离。注意:qhead[maxn],而不是qhead[maxm]。输出用%I64d,不要用%lld。C++ RE后 尝试用 G++交。代码:struct node...
分类:
其他好文 时间:
2014-10-05 00:01:07
阅读次数:
267
题意:N个点,构成一棵树。给出这棵树的结构。M条边,(a1,b1)...(am,bm),代表给树的这些点对连上边。这样就形成了有很多环的一个新”树“。现在要求你在原树中断一条边,在M条边中断一条边,使得新”树“被分成两个部分。问有多少种方案。思路:连上某条新边(a,b),则必定形成一个环。环的路径是...
分类:
Web程序 时间:
2014-10-04 22:13:47
阅读次数:
337
/* *算法引入: *树上两点的最近公共祖先; *对于有根树的两个结点u,v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u,v的祖先且x的深度尽可能大; *对于x来说,从u到v的路径一定经过点x; * *算法思想: *Tarjan_LCA离线算法; *Tarjan算法基...
分类:
其他好文 时间:
2014-10-04 18:57:16
阅读次数:
146
首先,这是一道坑题,我拍了几百组数据都是对的,交上去就WA,原因下面会讲。。。一开始我觉得要链剖,后来ZYH说。。。只要dfs序就可以解题。然后,解法嘛。。。就是每个点到根的链都建成一棵线段树,然后发现会MLE,于是就可持久化了所有线段树。在查询的时候呢,先找出两个点a, b的LCA,不妨叫c,然后...
分类:
其他好文 时间:
2014-10-04 17:38:16
阅读次数:
178
题意:给出一棵树的结构。给出两个点X和Y,求它俩的LCA。思路:只需求两个点的LCA,用了两种方法,一种离线tarjan,一种直接搞。看代码。代码:方法一:直接搞。int const maxn = 10005;int T,n,a,b;int fa[maxn];int X,Y;int main(){ ...
分类:
其他好文 时间:
2014-10-04 16:48:16
阅读次数:
146
跟去年NOIP某题基本一样。最小生成树之后,就变成了询问连接两点的路径上的权值最大的边。倍增LCA、链剖什么的随便搞。块状树其实也是很简单的,只不过每个点的点权要记录成“连接其与其父节点的边的权值”,然后暴力LCA时不要用LCA的值更新答案了。 1 #include 2 #include 3 ...
分类:
Web程序 时间:
2014-10-04 10:29:26
阅读次数:
454
题目大意:给定一个n个点m条边的无向连通图,k次询问两点之间所有路径中最长边的最小值
NOIP2013 货车运输,几乎就是原题。。。只不过最小边最大改成了最大边最小。。。
首先看到最大值最小第一反应二分答案 但是二分答案O(kmlogn)明显做不了 这里我们考虑最小生成树
先生成一棵最小生成树,然后每次询问利用倍增LCA求出路径上的最大权值即可
本蒟蒻居然把LCA写挂了。。。 而且样例还过...
分类:
Web程序 时间:
2014-10-03 17:28:54
阅读次数:
275