B - Housewife Wind POJ - 2763 因为树剖+线段树只能解决点权问题,所以这种题目给了边权的一般要转化成点权. 知道这个以后这个题目就很简单了. 怎么转化呢,就把这个边权转化为两点之间深度更大的那个就可以了. 还要注意的是,这个公共祖先的点权要被减去. #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <a…
Language: Default Housewife Wind Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 10525   Accepted: 2921 Description After their royal wedding, Jiajia and Wind hid away in XX Village, to enjoy their ordinary happy life. People in XX Villa…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3626 题意: 给出一个n个节点的有根树(编号为0到n-1,根节点为0,n <= 50000). 一个点的深度定义为这个节点到根的距离+1. 设dep[i]表示点i的深度,LCA(i,j)表示i与j的最近公共祖先. 有q次询问,每次询问给出l,r,z,求∑ dep[LCA(i,z)] (l<=i<=r). (即,求在[l,r]区间内的每个节点i与z的最近公共祖先的深度之和) 题解:…
单个边的权值修改以及询问路径上的权值之和. 数据量比较大,用vector存图会超时的. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> using namespace std; void scan(int& x) { x = ; int ch = ' '; ') ch = getchar(); +…
题目链接:http://poj.org/problem?id=2763 题目大意:某人初始在s点.有q次移动,每次移动沿着树上一条链,每经过一条边有一定花费,这个花费可以任意修改.问每次移动的花费. 解题思路: 树链剖分基础题.每次Q之后改变一下s. 线段树记录的是边权.方法是对于一条边(u,v),边权值加在dep比较大的那一端. 链查询(边)和 链查询(点)在轻链时略有不同. 注意本题使用vector邻接表存图是会TLE的,应该使用链式前向星.树链剖分中使用链式前向星是基本要求. #inclu…
<题目链接> 题目大意: 给定一棵无向树,这棵树的有边权,这棵树的边的序号完全由输入边的序号决定.给你一个人的起点,进行两次操作: 一:该人从起点走到指定点,问你这段路径的边权总和是多少. 二:对指定序号的边的权值做一些改变. 解题分析: 本题用的是树链剖分,同时用线段树去维护剖分出的树链.并且,本题也是无向边权转点权的典型例题,这部分要重点掌握. #include <cstdio> #include <cstring> #define Lson l,mid,rt<…
差不多是模板题,不过要注意将边权转化为点权,将边的权值赋给它所连的深度较大的点. 这样操作过后,注意查询ask()的代码有所改变(见代码注释) 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 const int maxn=100010; 6 int head[maxn],to[maxn<<1],nxt[maxn<<1],to…
题目描述 毛毛虫经过及时的变形,最终逃过的一劫,离开了菜妈的菜园. 毛毛虫经过千山万水,历尽千辛万苦,最后来到了小小的绍兴一中的校园里. 爬啊爬~爬啊爬毛毛虫爬到了一颗小小的"毛景树"下面,发现树上长着他最爱吃的毛毛果~ "毛景树"上有N个节点和N-1条树枝,但节点上是没有毛毛果的,毛毛果都是长在树枝上的.但是这棵"毛景树"有着神奇的魔力,他能改变树枝上毛毛果的个数: Change k w:将第k条树枝上毛毛果的个数改变为w个. Cover u…
题目链接:http://poj.org/problem?id=3237 题意:给定一棵n个结点n-1条边的树. 每条边都是一个边权. 现在有4种操作 1:CHANGE I V:把(输入的)第i条边的边权改为V 2:NEGATE a b:把点a到点b的路径上的边权取反 3:QUERY a b:输出点a到点b的路径上边权最大值. 4:DONE:结束操作. 思路:树链剖分. 涉及的是边权所以把边权转化为点权,做法是将边权赋值到这条边deep大的点上. 剖分后用线段树维护. 1操作对应单点更新 2操作对…
/* luogu1505 非常简单的处理边权的树剖题. 在树上将一条边定向,把这条边的权值赋给这条边的出点 树剖的时候不计算lca权值即可 */ #include<bits/stdc++.h> using namespace std; #define ll long long const int h=200010; //线段树部分 ll a[h]; struct node{ int l,r; ll val,mx,mn; ll lz; }tree[h*4]; void pushup(int ro…