树上莫队就是把莫队搬到树上…利用欧拉序乱搞。。

子树自然是普通莫队轻松解决了

链上的话 只能用树上莫队了吧。。

考虑多种情况

[X=LCA(X,Y)]

[Y=LCA(X,Y)]

else

void dfs(int u) {
sz[u] = 1 ; rev[st[u] = ++ cnt] = u ;
for(int i = 0 ; i < G[u].size() ; i ++) {
int v = G[u][i] ;
if(v == fa[u]) { continue ; }
fa[v] = u ; dep[v] = dep[u] + 1 ;
dfs(v) ; sz[u] += sz[v] ;
if(sz[v] > sz[son[u]]) son[u] = v ;
}
rev[ed[u] = ++ cnt] = u ;
}

首先呢 \(st[lca]\leq st[x],st[lca]\leq st[y]\)

那么为了方便下面的表示都是 \(st_x < st_y\)

如果 \(x\) 不是 \((x,y)\) 的LCA 那么就GG了 额外统计 LCA 的贡献

if(lca == x) { q[i].l = st[x] ; q[i].r = st[y] ; }
else { q[i].l = ed[x] ; q[i].r = st[y] ; q[i].lca = lca ; }

大概长这个样子吧。。

  sort(q + 1 , q + Q + 1) ;
int l = 1 , r = 0 ;
for(int i = 1 ; i <= Q ; i ++) {
while(l > q[i].l) { Add(rev[-- l]) ; }
while(r < q[i].r) { Add(rev[++ r]) ; }
while(l < q[i].l) { Add(rev[l ++]) ; }
while(r > q[i].r) { Add(rev[r --]) ; }
if(q[i].lca) { Add(q[i].lca) ; }
Ans[q[i].id] = ans ;
if(q[i].lca) { Add(q[i].lca) ; }
}

SP10707 COT2 - Count on a tree II [树上莫队学习笔记]的更多相关文章

  1. SP10707 COT2 - Count on a tree II (树上莫队)

    大概学了下树上莫队, 其实就是在欧拉序上跑莫队, 特判lca即可. #include <iostream> #include <algorithm> #include < ...

  2. spoj COT2 - Count on a tree II 树上莫队

    题目链接 http://codeforces.com/blog/entry/43230树上莫队从这里学的,  受益匪浅.. #include <iostream> #include < ...

  3. SPOJ COT2 Count on a tree II 树上莫队算法

    题意: 给出一棵\(n(n \leq 4 \times 10^4)\)个节点的树,每个节点上有个权值,和\(m(m \leq 10^5)\)个询问. 每次询问路径\(u \to v\)上有多少个权值不 ...

  4. [SPOJ]Count on a tree II(树上莫队)

    树上莫队模板题. 使用欧拉序将树上路径转化为普通区间. 之后莫队维护即可.不要忘记特判LCA #include<iostream> #include<cstdio> #incl ...

  5. SP10707 COT2 - Count on a tree II 莫队

    链接 https://vjudge.net/problem/SPOJ-COT2 https://www.luogu.org/problemnew/show/SP10707 思路 dfs欧拉序转化为普通 ...

  6. [SP10707]COT2 - Count on a tree II

    题目大意:有一棵$n$个节点的树,第$i$个点有一个颜色$C_i$,$m$组询问,每次问$x->y$的路径上有多少种颜色 题解:树上莫队,把树按欧拉序展开成一条链,令第$i$个节点第一次出现在序 ...

  7. SP10707 COT2 - Count on a tree II 莫队上树

    题意:求一条链 \((u,v)\) 上不同的颜色数. 我们可以求出树的出栈入栈序(or 括号序?我也不确定). 图(from attack) 然后有一个很优美的性质: 设点 \(u\) 的入栈时间为 ...

  8. SPOJ COT2 - Count on a tree II(LCA+离散化+树上莫队)

    COT2 - Count on a tree II #tree You are given a tree with N nodes. The tree nodes are numbered from  ...

  9. COT2 - Count on a tree II(树上莫队)

    COT2 - Count on a tree II You are given a tree with N nodes. The tree nodes are numbered from 1 to N ...

随机推荐

  1. MySQL物理物理备份与还原工具xtraBackup

    (一)xtraBackup简介 xtraBackup是Percona公司开发的一款MySQL数据库备份软件,在备份模式中属于物理备份.其显著特点是开源.免费.备份执行过程中不会阻塞事物.备份可压缩.支 ...

  2. provider networks和self-service networks

    Provider Network 服务布局 Self-Service Network 网络布局: 网络布局 Provider Networks概述  Provider networks - Conne ...

  3. 一次DB故障引起的反思和MySQL Operator选型

    前言 在一次数据库故障后,我们发现业务库会根据业务的等级会划分多个 MySQL 实例,许多业务库会同时属于一个 MySQL 实例,当一个库引发问题后整个实例的状态是不可控的.从而导致这个实例上的所有业 ...

  4. 自学Java第三章——《流程控制语句结构》

    流程控制语句结构分为: 1.顺序结构:从上到下依次执行 2.分支结构:多个分支选择其中一个分支执行 3.循环结构:重复执行某些代码 3.1 顺序结构 执行过程:从上到下顺序执行 3.1.1 输出语句 ...

  5. Intellij idea智能提示设置

    忽略大小写敏感: 打开设置(CTRL+ALT+S)搜索editor,找到"Code Completion"->点击Case sensitive completion后面的选择 ...

  6. 10-SpringMVC04

    FreeMarker 1.入门案例 1. 导包:freemarker.jar 2. 需要创建模板文件的路径:src/main/resources/template 3. 创建一个模板对象:hello. ...

  7. VFP 图形文件与剪切板互换的API解决方法

    在 VFP 中,凡遇图形处理,大多数情况下,都会涉及到图形文件与剪切板互换的情况.下面给出利用 API 解决的方法.这是原来从网上摘下来的,版权归原作者.基本处理的代码如下,你可以将其应用到你的代码中 ...

  8. c++头文件包含 #ifndef ##pragma once

    2013-04-14 17:03 (分类:计算机程序) 烦死了,这种垃圾小问题很多,你又必须要知道.......在编写c++程序时,会编写多个类或者多个cpp文件,免不了要多次使用include包含头 ...

  9. 杭电-------2046骨牌铺方格(C语言写)

    #include<stdio.h> ] = { }; long long recrusion(int n) { || a[n]>) { return a[n]; } ) + recr ...

  10. 意法半导体STM32MP157A MPU加持,米尔科技首款ST Linux开发板MYD-YA157C评测

    ST公司去年推出了MPU系列芯片,MPU系列不同于以往产品,它既包含有ARM公司Cortex M 单片机核心,也包含有ARM公司Cortex A 应用处理器核心,以期将STM32单片机产品优势扩展到更 ...