【CF765E】Tree Folding】的更多相关文章

题目大意:给定一棵 N 个节点的无根树,边权都是 1,可以把树上父亲相同的两条长度相同的链合并,问最后是否可以合并成一条链,如果可以,输出链的最小长度,否则输出 -1. 题解: ​由于我们不知道最后的根是哪个节点,于是我们先随便找一个点dfs一次,并用一个 set 来记录当前节点为根的子树中所有链的长度.由于 set 自动去重,那么 set 中的元素个数 num 就只有以下几种情况: num=0,此时说明已经是叶子节点,直接返回 0 num=1,此时说明子树中所有链都可以合并成为一条链,返回链长…
[POJ3237]Tree Description You are given a tree with N nodes. The tree's nodes are numbered 1 through N and its edges are numbered 1 through N − 1. Each edge is associated with a weight. Then you are to execute a series of instructions on the tree. Th…
LCT 又一道名字叫做Tree的题目…… 看到删边加边什么的……又是动态树问题……果断再次搬出LCT. 这题比起上道[3282]tree的难点在于需要像线段树维护区间那样,进行树上路径的权值修改&查询.那么类似的,我们就可以在splay的每个节点上记录一坨信息了…… 个人感觉跟线段树标记不一样的地方: 1.标记只是给儿子们用的,打标记的节点本身在打标记的同时就修改了信息了,然后在Push_down的时候直接放下去……(没法在push_down的时候更新自己,要不mul标记怎么改?) 2.虽然sp…
[Luogu1501]Tree(Link-Cut Tree) 题面 洛谷 题解 \(LCT\)版子题 看到了顺手敲一下而已 注意一下,别乘爆了 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include<set> #include<map>…
[BZOJ3282]Tree (Link-Cut Tree) 题面 BZOJ权限题呀,良心luogu上有 题解 Link-Cut Tree班子提 最近因为NOIP考炸了 学科也炸了 时间显然没有 以后再来填LCT的坑 这种题目直接上代码了.. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<alg…
[AtCoder3611]Tree MST(点分治,最小生成树) 题面 AtCoder 洛谷 给定一棵\(n\)个节点的树,现有有一张完全图,两点\(x,y\)之间的边长为\(w[x]+w[y]+dis(x,y)\),其中\(dis\)表示树上两点的距离. 求完全图的\(MST\). 题解 首先连边的这个式子可以直接转换成树上的两点间的路径,所以接下来只考虑\(dis(x,y)\). 考虑\(Boruvka\)算法的执行过程,每次都会选择到达一个点集最近的一个点,然后将他们连边. 现在考虑模拟这…
[HDU5909]Tree Cutting(FWT) 题面 vjudge 题目大意: 给你一棵\(n\)个节点的树,每个节点都有一个小于\(m\)的权值 定义一棵子树的权值为所有节点的异或和,问权值为\(0..m-1\)的所有子树的个数 题解 考虑\(dp\) 设\(f[i][j]\)表示以\(i\)为根节点的子树中,异或和为\(j\)的子树的个数 很显然,每次合并就是两个\(dp\)值做\(xor\)卷积 那么直接用\(FWT\)优化就行了 #include<iostream> #inclu…
[BZOJ2654]Tree(凸优化,最小生成树) 题面 BZOJ 洛谷 题解 这道题目是之前\(Apio\)的时候写的,忽然发现自己忘记发博客了... 这个万一就是一个凸优化, 给所有白边二分一个额外权值,并且给边权加上这个权值. 然后跑最小生成树,将限制问题转换为判定问题即可. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath…
[POJ1741]Tree(点分治) 题面 Vjudge 题目大意: 求树中距离小于\(K\)的点对的数量 题解 完全不觉得点分治了.. 简直\(GG\),更别说动态点分治了... 于是来复习一下. 对于每一层分治重心 求出它到子树中任意点的距离 然后\(two-pointers\)计算满足大于\(K\)的点对的数目,累加到答案中, 但是同一棵子树内的会算重 所以再对于每一棵子树,减去字数内两两满足要求的点对 完全不记得了 #include<iostream> #include<cstd…
点分治[bzoj1468] Tree Description 给你一棵TREE,以及这棵树上边的距离.问有多少对点它们两者间的距离小于等于K Input N(n<=40000) 接下来n-1行边描述管道,按照题目中写的输入 接下来是k Output 一行,有多少对点之间的距离小于等于k 点分治开始入门. 点分治,主要是解决形如:给你一棵树,求树上满足XX条件的点对的对数. 所以说应对的问题很多时候都和树形DP相同. 首先告诉自己,分治是高效的算法. 想一下,平时在面对普通的分治问题,每次肯定都是…
[BZOJ2654]tree Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色边数. 接下来E行,每行s,t,c,col表示这边的端点(点从0开始标号),边权,颜色(0白色1黑色). Output 一行表示所求生成树的边权和. V<=50000,E<=100000,所有数据边权为[1,100]中的正整数. Sample Input 2 2 1…
[题目链接]:http://codeforces.com/problemset/problem/765/E [题意] 给你一棵树; 可以把一个节点的两条相同长度的链合并成一条链; 且这两条相同长度的链上的点不能有"分叉"; 问你最后是否能形成一条链; 然后让你求链的最短值; [题解] dfs; 类似树形DP的东西; 对于每个节点x; 看看它下面的链的长度有多少种->把链的长度存在set里面最后看看set的大小,来确定链的种类; 如果链的种类为0,则这个节点为叶子节点,直接返回0…
Description You are given a tree with N nodes. The tree’s nodes are numbered 1 through N and its edges are numbered 1 throughN − 1. Each edge is associated with a weight. Then you are to execute a series of instructions on the tree. The instructions…
1468: Tree Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1025  Solved: 534[Submit][Status][Discuss] Description 给你一棵TREE,以及这棵树上边的距离.问有多少对点它们两者间的距离小于等于K Input N(n<=40000) 接下来n-1行边描述管道,按照题目中写的输入 接下来是k Output 一行,有多少对点之间的距离小于等于k Sample Input 7 1 6 13 6…
http://poj.org/problem?id=3237 (题目链接) 树链剖分模板题,然而这150+行的程序我调了一天,历经艰辛,终于ac.. 题意 给出一个n个节点的带权树,要求维护操作:1.求出树上两点之间的边权的最大值:2.更改一条边上的权值:3.将树上两点之间的所有边权取各自的相反数. solution 神奇的树链剖分+线段树维护查询和修改操作. 树链剖分时,我们将每条边的权值转换为除树根外每个节点上的权值(也就是对于每个节点与它父亲的边的权值转换到了自己的权值). 之后就是标准的…
2016-06-01 08:50:36 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2631 注意加和乘的标记下传问题. 还有就是split后,要分清x和y哪个是祖先. pushup在access和rotate后都要进行. 这题还卡常数,开ll就会T,开unsigned int即可. #include<bits/stdc++.h> #define inf 1000000000 #define uint unsigned int #def…
题意:在一棵N个节点,有边权的树上维护以下操作: 1:单边修改,将第X条边的边权修改成Y 2:区间取反,将点X与Y在树上路径中的所有边边权取反 3:区间询问最大值,询问X到Y树上路径中边权最大值 n<=10000 CAS<=20 思路:做了2天,改出来的一刻全身都萎掉了 边权转点权,点权就是它到父亲的边的边权,加一些反向标记 取反的标记TAG下传时不能直接赋值为-1,而是将原先的标记取反 多组数据时倍增数组,深度也需要清零 树链剖分不能取第一条边,需要+1 ; ..]of record min…
LCT 喜闻乐见的Link-Cut-Tree…… srO zyf http://www.cnblogs.com/zyfzyf/p/4149109.html 目测我是第222个?………………不要在意这些细节…… 和以前写的splay还是有些区别呢…… 比如splay中Push_down的写法……还有rotate的新姿势~ 算法看看论文什么的……很好懂 /************************************************************** Problem: 3…
点分治 怎么又一道叫Tree的题目……真是醉了. 本题为漆子超论文<分治算法在树的路径问题中的应用>例一 题解 : http://blog.csdn.net/sdj222555/article/details/7893862      http://blog.csdn.net/yang_7_46/article/details/9966455 既然是点分治嘛,为了保证复杂度不退化,必然要找树的重心,这一步可以通过一次dfs实现:以任意节点为根(方便起见就选1号节点了)求出每个节点子树大小,那么…
Description 给你一棵TREE,以及这棵树上边的距离.问有多少对点它们两者间的距离小于等于K Input N(n<=40000) 接下来n-1行边描述管道,按照题目中写的输入 接下来是k Output 一行,有多少对点之间的距离小于等于k Sample Input 7 1 6 13 6 3 9 3 5 7 4 1 3 2 4 20 4 7 2 10 Sample Output 5   又是一道点分治的题,方法同聪聪可可. #include<cstdio> #include<…
题目描述 Give a tree with n vertices,each edge has a length(positive integer less than 1001). Define dist(u,v)=The min distance between node u and v. Give an integer k,for every pair (u,v) of vertices is called valid if and only if dist(u,v) not exceed k…
Tree命令简介 tree是一种递归目录列表命令,产生一个深度缩进列表文件,这是彩色的ALA dircolors如果ls_colors设置环境变量和输出是TTY.树已经被移植和报道以下操作系统下工作:Linux,FreeBSD,OS X操作系统,Solaris,HP UX,Cygwin,HP NonStop OS / 2. Tree命令安装 1.下载安装包,地址:http://mama.indstate.edu/users/ice/tree/ 2.解压安装 1)Linux环境(CentOS 6.…
Description 一棵n个点的树.每一个点的初始权值为1. 对于这棵树有q个操作,每一个操作为下面四种操作之中的一个: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 u2 v2:将树中原有的边(u1,v1)删除,增加一条新边(u2,v2),保证操作完之后仍然是一棵树: * u v c:将u到v的路径上的点的权值都乘上自然数c: / u v:询问u到v的路径上的点的权值和.求出答案对于51061的余数. Input 第一行两个整数n,q 接下来n-1行每行两个正…
Tree Time Limit: 10 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description 给你一棵TREE,以及这棵树上边的距离,问有多少对点它们两者间的距离小于等于K. Input 第一行一个n,接下来n-1行边描述管道,按照题目中写的输入,接下来是一个k. Output 仅包括一个整数,表示有多少对点之间的距离小于等于k. Sample Input 7 1 6 13 6 3 9 3 5 7 4 1 3 2 4 20 4…
2654: tree 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. 二分答案,然后跑最小生成树判断. 注意优先跑白色边. code: #include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int wx=500017; inline int read(){ int sum=0,f=1; ch…
题目如下: An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example, suppose that when a 6-node binary tree (with the keys numbered from 1 to 6) is traversed, the stack operations are: push(1); push(2); push(3);…
题面 解析 其实这题可以考虑离线做法,用并查集解决. 因为仔细想,添加标记并不方便, 但如果用并查集记录下祖先, 再一一删除,就会方便很多. 先把每次操作记录下来, 同时记录下每个点被标记的次数(因为有多次标记,所以不能只用bool). 然后dfs遍历,记录祖先. 再倒序处理, 当一个点的标记被删完时,就把它的并查集指向它的父亲, 并统计答案. 最后输出就行了! 具体看代码: #include<bits/stdc++.h> using namespace std; inline int rea…
(题面来自luogu) 题目描述 给你一棵TREE,以及这棵树上边的距离.问有多少对点它们两者间的距离小于等于K 输入格式 N(n<=40000) 接下来n-1行边描述管道,按照题目中写的输入 接下来是k 输出格式 一行,有多少对点之间的距离小于等于k 原本是点分治的模版题,从昨晚调到今晚--这里记录下点分治实现时需要注意的几个细节. 1.分治过程中递归子树大小的确定 以下是点分治过程的核心函数,其中cur表示以u为根进行分治的树的大小. void Divide(int u) { vis[u] …
1A爽,感觉又对指针重怀信心了呢= =,模板题,注意单点修改时splay就好,其实按吾本意是没写的也A了,不过应该加上能更好维护平衡性. ..还是得加上好= = #include <iostream> #include <cstdio> #define N 300010 using namespace std; int n,m; struct node { node *fa,*ch[]; int xor_sum,data; bool rev; node(int x); ];} ]…
http://www.lydsy.com/JudgeOnline/problem.php?id=2654 (题目链接) 题意 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树.题目保证有解. solution 今天考试题,以为是神题不可做,直接放弃了..没想到这么水..我们考虑把白边的权值增加,因为无论白边的权值增加多少,最小生成树中的白边不会改变.所以我们二分每次把所有白边的权值增加多少,按边权大小排序后克鲁斯卡尔看选出的白边是否大于need.统计答…