题目大意:指定一颗树上有3个操作:询问操作,询问a点和b点之间的路径上最长的那条边的长度;取反操作,将a点和b点之间的路径权值都取相反数;变化操作,把某条边的权值变成指定的值。#include #include #include #include #include #include #include...
分类:
其他好文 时间:
2015-12-07 22:16:23
阅读次数:
260
树链剖分边更新,线段树区间更新(取相反数)+单点更新,区间查询最大值,区间取相反数的操作可以维护两个值mmax和mmin,当取反时最大最小值取反互换 1 #include 2 #include 3 #include 4 using namespace std; 5 #define l...
分类:
其他好文 时间:
2015-07-28 18:14:11
阅读次数:
107
这题同样是要将边权下放到点这题要注意的是negate询问,是将权值取反,因为是区间修改,要用到laze标记但是要注意的是,如果有标记下放的时候,如果下边已经有标记了, 那么就是取反,再取反, 所以只要将标记去除就行了就因为这个wa了好几发同时,线段树也要维护一个最小值,因为取反之后,最小值就变成最大...
分类:
其他好文 时间:
2015-07-06 01:24:31
阅读次数:
99
//Accepted 2280 KB 688 ms/* source:poj3237 time :2015.5.29 by :songt *//*题解:树链剖分基于边权,路径查询最大值线段树开到3倍RE,开到4倍AC */#include #include ...
分类:
其他好文 时间:
2015-05-30 00:26:28
阅读次数:
141
1583. [POJ3237]树的维护★★★☆ 输入文件:maintaintree.in 输出文件:maintaintree.out 简单对比
时间限制:5 s 内存限制:128 MB
【题目描述】给你由N个结点组成的树。树的节点被编号为1到N,边被编号为1到N-1。每一条边有一个权值。然后你要在树上执行一系列指令。指令可以是如下三种之一:
CHANGE i v:将第i条边的权...
分类:
其他好文 时间:
2015-05-22 09:43:52
阅读次数:
187
题目链接:poj--3237
题意很简单,给出n个节点的一棵树,有三种操作:
1、C修改第i条边的值为v
2、N改变节点a到b内边的权值的符号(取反)
3、Q询问节点a到b内权值的最大值
首先树链剖分,将边整合到线段树上,线段树数组cl,因为存在取反操作,所以最大值可能是由最小值取反得到,所以记录最大和最小值,cl[i][0]记录第i段的最大值,cl[i][1]记录最小值,lazy做标记...
分类:
其他好文 时间:
2015-04-19 16:17:18
阅读次数:
141
关于边剖 之前做的大多是点剖,其实转换到边剖非常简单。 我的做法是每个点的点权记录其到父亲节点的边的边权。 只要solve的时候不要把最上面的点记录在内就可以了。TreeDescription You are given a tree withNnodes. The tree’s nodes...
分类:
其他好文 时间:
2015-04-11 11:44:13
阅读次数:
182
题目链接:http://poj.org/problem?id=3237题目大意:指定一颗树上有3个操作:1)询问操作,询问a点和b点之间的路径上最长的那条边的长度(即最大值);2)取反操作,将a点和b点之间的路径权值都取相反数;3)变化操作,把某条边的权值变成指定的值。分析:树链剖分,线段树维护好区...
分类:
其他好文 时间:
2015-01-22 23:03:09
阅读次数:
199
题意:
change,把第i条边权值改成v
negate,把a到b路径上所有权值取相反数(*(-1))
query,询问a到b路径上所有权值的最大值
树链剖分。
以前一直不会,但是我恶补LCT了,所以先学一下。
对于现在的水平来说,树剖太水了,自己翻资料吧,我只提供一个还算不错的代码。
扒代码的时候可以用我的这个。
附rand和pai。
代码:
#inc...
分类:
其他好文 时间:
2014-11-24 11:56:21
阅读次数:
223
题意:三种操作 ①修改第i条边的权值为val,②把u到v路径上的所有边的权值 去相反数③求u 到v路径上最大的边权线段树的区间更新还是不熟练,,一直搞不对调试了好久还是没对,最后还是看的kuangbin的代码。 1 #include 2 #include 3 #include 4 #i...
分类:
其他好文 时间:
2014-10-09 23:23:18
阅读次数:
297