反思---树上LIS】的更多相关文章

题面 给定一棵n个节点的有根树,编号依次为1到n,其中1号点为根节点.每个点有一个权值v_i. 你需要将这棵树转化成一个大根堆.确切地说,你需要选择尽可能多的节点,满足大根堆的性质:对于任意两个点i,j,如果i在树上是j的祖先,那么v_i>v_j. 请计算可选的最多的点数,注意这些点不必形成这棵树的一个连通子树. 分析 由于点不需要相邻,此题其实是树上的LIS,从叶子节点向根节点形成LIS 考虑LIS的\(O(nlogn)\)算法中用到的数组,用multiset对每个节点维护这样一个数组,存储子…
读错题了,然后写了一个树上 LIS,应该是对的吧...... code: #include <bits/stdc++.h> #define N 200005 #define LL long long #define setIO(s) freopen(s".in","r",stdin) using namespace std; struct seg { #define lson t[x].ls #define rson t[x].rs int tot; s…
树上LIS:树上找一条简单路径的子序列使点权严格单增,最大化长度. 原题数据过小,用线段树合并可以做到$O(n\log n)$. 每个点用一棵线段树维护以每个权值为结尾的LIS最长长度,线段树合并时更新子序列不包含当前点时的最大值,再线段树上区间询问得到包含时的最大值并更新线段树. #include<cstdio> #include<algorithm> #define lson ls[x],L,mid #define rson rs[x],mid+1,R #define rep(…
1. CF 438D The Child and Sequence 大意: n元素序列, m个操作: 1,询问区间和. 2,区间对m取模. 3,单点修改 维护最大值, 取模时暴力对所有>m的数取模. 因为取模后至少减半, 复杂度$O(nlognlogC)$ 2. CF 431E Chemistry Experiment 大意: n个试管, 第$i$个试管有$a_i$单位水银, m个操作: 1, 修改$a_x$改为$v$. 2, 将$v$单位水倒入试管, 求一种方案使得有水的试管水银与水总量的最大…
题目链接 Treeland Tour 题目就是让你求树上LIS 先离散化,然后再线段树上操作.一些细节需要注意一下. #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i) #define dec(i, a, b) for (int i(a); i >= (b); --i) typedef long long LL; const int N =…
题目描述: bz luogu 题解: 相当于树上$LIS$问题. 考虑一维情况下的贪心,我们可以用multiset启发式合并搞. 代码: #include<set> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; template<typename T> inline void read(T&x) { T f = ,c = ;cha…
这个和 bzoj 5469 几乎是同一道题,但是这里给出另一种做法. 你发现你要求的是一个树上 LIS,而序列上的 LIS 有一个特别神奇的 $O(n\log n) $ 做法. 就是维护一个单调递增的栈,如果发现新加元素大于栈顶,则直接加入,否则在序列中二分出一个大于等于该元素的最小值,然后替换掉. 这个单调栈维护的并不是 LIS,而是 LIS 中每个长度的最小结尾数值. 这个拓展到树上同理,你发现儿子之间互不影响,所以可以直接合并. 然后,再用当前节点的值去替换一个大于等于这个值的最小值. c…
一直在期盼的联赛,真正来临时,却远不像我想象的样子. 有些事,真的不敢再想. 算法可以离线,时光却不能倒流.dfs可以回溯,现实却没有如果. 有些事,注定只能成为缺憾,抱恨终生. 不得不说今年Noip画风大变. 一是题目难度不循常规.D1难度如此之大,估计很多人都会很紧张.(比如我,下了场以为要有一群250+的,感觉自己要AFO了.)并且,D1T2居然比D1T3还难(D2也是如此),把好多人给坑了(估计很多人都是死磕T2不放结果T3的76分暴力都没时间写了). PS:感觉题目难度应该是这样的,D…
LIS(Longest Increasing Subsequence)是一类典型的动态规划类问题,简化描述如下: 给定$N(n) = \{1,2...,n\}$的一个排列$P(n)$,求$P(n)$中最长上升子列的长度. 譬如令$n = 6$, $N(6) = \{1,2,3,4,5,6\}$,$P(n) = \{1,4,2,5,3,6\}$. 容易发现$LIS(P(n)) = \{1,2,3,6\} or \{1,4,5,6\}...$. 起初我们拿到问题的思路是这样的,我们试着先分析序列的前…
3784: 树上的路径 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 88  Solved: 27[Submit][Status][Discuss] Description 给定一个N个结点的树,结点用正整数1..N编号.每条边有一个正整数权值.用d(a,b)表示从结点a到结点b路边上经过边的权值.其中要求a<b.将这n*(n-1)/2个距离从大到小排序,输出前M个距离值.   Input 第一行两个正整数N,M 下面N-1行,每行三个正整数a,…