C. 【UNR #3】配对树
题解:
首先可以贪心 于是问题可以等价成一条边被算当且仅当子树中个数为奇数个
题解的做法比较简单
考虑每条边,加入其子树内的点
然后为了保证区间长度为偶数
分成f0,0 f0,1 f1,0 f1,1即可
暴力插入复杂度不对改成启发式合并即可
这里插入的时候可用线段树维护 把x-n这一段翻转即可
这样是两个log
一般可以用线段树合并优化启发式合并
但是这里改成线段树合并的话要换一种维护方式
我们维护左儿子ddl的个数来决定右儿子中的信息是直接加还是需要翻转
这样就可以线段树合并了
复杂度一个log
另外我开始想了一个2个log的做法
为了保证区间长度为偶数 我们分成从奇数还是偶数开始两种情况,之后把两个看成一组
于是我们现在要维护的就是,到当前考虑的序列的点
树上的每个点,其子树内有偶数个点的方案数、奇数个点的方案数
然后观察插入两个点的时候
当且仅当这个点在两个点的路径上(除lca) 增加了奇数个点,其余都是增加偶数个点
取出两点路径可以利用树链剖分
然后要支持两种操作 1.偶数=原本奇数,奇数=原本偶数+1 2.偶数=原本偶数+1,奇数=原本奇数
这个我们采用线段树维护
维护三个标记 rev、偶数+、奇数+即可
C. 【UNR #3】配对树的更多相关文章
- 【UOJ#388】【UNR#3】配对树(线段树,dsu on tree)
[UOJ#388][UNR#3]配对树(线段树,dsu on tree) 题面 UOJ 题解 考虑一个固定区间怎么计算答案,把这些点搞下来建树,然后\(dp\),不难发现一个点如果子树内能够匹配的话就 ...
- [UOJ388]【UNR #3】配对树
uoj description 给你一棵\(n\)个节点的树以及一个长为\(m\)的序列,序列每个位置上的值\(\in[1,n]\),你需要求出把序列中所有长度为偶数的区间内所有数拿出来在树上以最小代 ...
- uoj#388. 【UNR #3】配对树(线段树合并)
传送门 先考虑一个贪心,对于一条边来说,如果当前这个序列中在它的子树中的元素个数为奇数个,那么这条边就会被一组匹配经过,否则就不会 考虑反证法,如果在这条边两边的元素个数都是偶数,那么至少有两组匹配经 ...
- 【UOJ388】配对树(dsu on tree+线段树)
传送门 题意: 给出一颗含有\(n\)个结点的无根树,之后给出一个长度为\(m\)的序列,每个元素在\([1,n]\)之间. 现在序列中每个长度为偶数的区间的完成时间定义为树上最小配对方法中每对匹配点 ...
- [UOJ388]配对树
题解 贪心+线段树 首先如果我们知道了哪些点是关键点应该怎么搞 显然最小的匹配方案所有的边至多被经过一次 可以考虑每条边的贡献 因为我们要贡献尽量小 所以我们尽量让每条边经过的人尽量少 那么每条边被经 ...
- UNR#3 Day1——[ 堆+ST表+复杂度分析 ][ 结论 ][ 线段树合并 ]
地址:http://uoj.ac/contest/45 第一题是鸽子固定器. 只会10分.按 s 从小到大排序,然后 dp[ i ][ j ][ k ] 表示前 i 个元素.已经选了 j 个.最小值所 ...
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- 【UNR #1】火车管理(主席树)
[UNR #1]火车管理(主席树) 好好的代码被 \(extra\ test\) 卡常了...我就放一个目前最快的版本吧... 题意简化: 有 \(n\) 个栈,\(m\) 次操作. 将 \(x\) ...
- 「UNR#1」奇怪的线段树
「UNR#1」奇怪的线段树 一道好题,感觉解法非常自然. 首先我们只需要考虑一次染色最下面被包含的那些区间,因为把无解判掉以后只要染了一个节点,它的祖先也一定被染了.然后发现一次染色最下面的那些区间一 ...
随机推荐
- time 与 data time
>>> import datetime>>> datetime.datetime.now()datetime.datetime(2018, 5, 30, 15, 3 ...
- Myeclipse运行提示错误: 找不到或无法加载主类 test.test1 终极解决办法
前提是代码没有问题 简单粗暴的解决办法: 重启电脑 解决办法2: 1.在控制台中点开“Problems”,查看里面的错误.如果是多个项目,可以将其他项目暂时关闭. 根据错误进行处理. 2.把项目cle ...
- postman 百度网盘下载 64位
最近找了一下postman的下载资源,竟然发现有些用户的资源要用csdn的积分下载,很是不爽.所以才想到在这里贴出我的百度网盘的地址 下载地址: 链接:https://pan.baidu.com/s/ ...
- UVA_414:Machined Surfaces
Language : C++ 4.8.2 #include<stdio.h> #include<string.h> int main(void) { int n; int su ...
- SQL if语句简要
if语句 可以作为表达式用 可以在存储过程中作为流程控制语句用 表达式 IF(条件,条件true,条件false) 示例 sex字段m,f 互换 update salary set sex = if( ...
- python列表、元组、字典、集合的简单操作
一.列表.元组 1.常用操作函数 #Author:CGQ import copy #列表 ''' names=["ZhangYang","XiaoHei",&q ...
- Card Hand Sorting 二进制枚举暴力
这个题其实由于只有4种花色的,那么每种花色排列的顺序,也不过是4!种,然后对于每种花色内部到底是升序还是降序,其实也可以直接暴力,一共也就4!*2^4种情况,然后直接进行排序就可以了,但是我们如何计算 ...
- 异常处理之try catch finally
package com.sxt.wrapper.test2; /* 0418 * 异常处理 * 采用异常处理的好处:保证程序发生异常后可以继续执行 * e.printStaceTrace:打印堆栈信息 ...
- @topcoder - SRM611D1L3@ ElephantDrinking
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定有一个 n*n 的平原,其中一些格子有些泉水.泉水每单位时间 ...
- H3C 常用设备管理命令