codeforce F - Three Paths on a Tree】的更多相关文章

F. Three Paths on a Tree time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output You are given an unweighted tree with nn vertices. Recall that a tree is a connected undirected graph without cycle…
题目链接 Paths on the tree 来源  2014 多校联合训练第5场 Problem B 题意就是给出m条树上的路径,让你求出可以同时选择的互不相交的路径最大数目. 我们先求出每一条路径(u, v)中u和v的LCA:w,按照路径的w的深度大小deep[w]对所有的路径排序. deep[w]越大,排在越前面. 然后从第一条路径开始一次处理,看c[u]和c[v]是否都没被标记过,如果都没被标记过则我们把这条路径选上,把答案加1. 同时标记以w为根的子树的节点为1,方便后续对c数组的查询…
题目链接:hdu 4912 Paths on the tree 题目大意:给定一棵树,和若干个通道.要求尽量选出多的通道,而且两两通道不想交. 解题思路:用树链剖分求LCA,然后依据通道两端节点的LCA深度排序,从深度最大优先选.推断两个节点均没被标 记即为可选通道. 每次选完通道.将该通道LCA下面点所有标记. #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #includ…
[题目]F. Imbalance Value of a Tree [题意]给定n个点的带点权树,求所有路径极差的和.n,ai<=10^6 [算法]并查集 [题解]先计算最大值的和,按点权从小到大排序,每个点x和相邻的已访问点的点集形成的路径的最大值都是a[x],因为已访问过的点点权较小,然后用并查集并起来.复杂度O(n log n). #include<cstdio> #include<algorithm> using namespace std; ; ]; int n,a[…
F. Imbalance Value of a Tree 题意: 给一颗带点权的树,求所有简单路径上最大点权和最小点权之差的总和. 思路: 所求问题可以看作求各路径上的最大值之和减各路径上的最小值之和.因此考虑每个点权的贡献次数,也就是他们成为最值的次数. 以求最大值之和为例分析问题,我们可以从最小点权开始统计,每次将最小点加入.这样做的好处是每次取出的点,一定是当前已取出点中最大的,即当前任何经过该点的路径的最大值一定是它.已加入的点用并查集来维护连通块大小,以便于统计.该点所在连通块和与该点…
D. Arpa's letter-marked tree and Mehrdad's Dokhtar-kosh paths CF741D 题意: 一棵有根树,边上有字母a~v,求每个子树中最长的边,满足这个边上的所有字母重拍后可以构成回文 发明者自己出的题...orz 由于本来知道就是dsu on tree,所以还是想出来了 首先点分治是没法做了,这是有根树 写成二进制,两条链合起来构成回文\(\rightarrow\)异或和为0或者只有一位是1 一开始困惑于只处理到当前根的异或和的话,随着当前…
题目链接 \(Description\) 给定一棵树,每条边上有一个字符(a~v).对每个节点,求它的子树中一条最长的路径,满足 路径上所有边上的字符可以重新排列成一个回文串.输出其最长长度. \(n\leq 5\times10^5\). \(Solution\) 可以构成回文串,即要么所有字符都出现了偶数次,要么有一个出现了奇数次.其余都出现了偶数次. 转化为异或!把每个字符c(0~21)映射到1<<c上去. 令\(s[x]\)表示根节点到\(x\)路径上边权的异或和.那么路径\((u,v)…
题目链接: Codeforces741D 题目大意:给出一棵树,根为$1$,每条边有一个$a-v$的小写字母,求每个点子树中的一条最长的简单路径使得这条路径上的边上的字母重排后是一个回文串. 显然如果一条路径上的字母重排后是回文串,那么最多有一个字母有奇数个.我们用$2^{22}$的一个二进制来记录有哪些字母有奇数个.剩下的只需要$dsu\ on\ tree$来求每个点的答案即可.对于每个点记录它到根的路径上的字母的二进制状态,显然位于一个点两个不同子树中的点的状态异或起来就是这两个点间路径的二…
题面 题意:给你一棵树,你起点在1,1也是根节点,你每次可以选择去你子树的某个叶子节点,也可以选择,从叶子节点返回距离不超过k的一个根, 也就是说,你从1开始,向下跳,选择一个叶子(就是没有子树的节点),然后可以选择一个距离小于等于k的点跳回去,然后继续跳下去再跳上来,问你最多能去多少个叶子节点,n<=1e6 题解:大概分析就是要找一颗子树,然后叶子节点的到主链上的距离小于等于k的尽量多,这样我们就可以跳下跳上的跳很多次了 h[u]表示u到最近的叶子节点的距离,f[u]表示u能去到最多叶子节点个…
题目描述 一棵根为1 的树,每条边上有一个字符(a-v共22种). 一条简单路径被称为Dokhtar-kosh当且仅当路径上的字符经过重新排序后可以变成一个回文串. 求每个子树中最长的Dokhtar-kosh路径的长度. 思路 不多的只能用树上启发式合并做的题...虽然算法很暴力,但是本题还是挺难想的. 考虑一共只有22种不同的边权,我们要找的是经过重新排序后回文的路径,也就是说:为偶数时,必须有两两相同的:为奇数时,最多只能有一个多出来的.那么我们考虑状压,对第$i$种边权压成$1<<i-1…
先说一下dsu算法. 例题:子树众数问题. 给出一棵树,每个点有点权,求每个子树中出现次数最多的数的出现次数. 树的节点数为n,\(n \leq 500000\) 这个数据范围,\(O(n \sqrt n)\)直接莫队会超时. 考虑一种暴力做法: 开一个全局数组,记录每中数的出现次数. 依次对每个点,用dfs遍历它的子树,并记录每种数的出现次数. 遍历结束后,找到众数,记录结果,并清空这个数组,进行下一次遍历. 可以发现,在最坏情况(例如一条链),算法的时间复杂度是\(O(n^2)\)的. 但是…
Note that this is the first problem of the two similar problems. You can hack this problem only if you solve both problems. You are given a tree with nn nodes. In the beginning, 00 is written on all edges. In one operation, you can choose any 22 dist…
\[ Preface \] 打比赛的时候先开了 F 题(雾 然后一眼看出 F 题结论,最后居然因为没有判重,交了三次才过. \[ Description \] 给出一棵无权树(可理解为边权为 \(1\) ),你需要选取三个点 \(a,b,c\) ,最大化 \(a,b\) 和 \(b,c\) 和 \(a,c\) 的简单路径的并集的长度. 输出这个最大长度和 \(a,b,c\) . \[ Solution \] 有一个结论: 必定会有一组最优解,使得 \(a,b\) 是树直径上的端点. 这个结论我现…
https://codeforces.ml/contest/1746/problem/D 题目大意:一棵n节点有根树,根节点为1,分别有两个数组 s[i] 顶点 i 的魅力值 c[i] 覆盖顶点 i 的路径数 每个顶点的路径数必须满足,同一父节点的子节点| c[v1]-c[v2] | <= 1 问当有k条路径时,∑c[i]*s[i]的最大值 思路: 因为同一父节点的子节点 | c[v1]-c[v2] | <= 1,所以对于父节点来说,每次都需要平分路径数,如果有多余的路径则考虑 分给贡献最大的…
意甲冠军:它使树m路径,当被问及选择尽可能多的路径,而这些路径不相交. 思考:贪心,比較忧伤.首先求一下每对路径的lca.依照lca的层数排序.在深一层的优先级高.那么就能够贪心了,每次选择层数最深的那一个,假设两个端点没有被标记,那么就选择这条路径,把lca的子树都标记掉. 代码: #pragma comment(linker, "/STACK:1024000000,1024000000") #include<iostream> #include<cstdio>…
思路 两次bfs找出树的直径并处理出端点离树上各叶子节点的距离,在直径上找一点的子树叶子p3,使得dis(p1,p2) + dis(p2,p3) + dis(p1,p3)最大 易知上式是路径实长的两倍 #include <bits/stdc++.h> #define dbg(x) cout << #x << "=" << x << endl #define eps 1e-8 #define pi acos(-1.0) usin…
A - Collecting Coins 题意: 给你四个数a,b,c,d,n.问你是否能将n拆成三个数A,B,C,使得A+a=B+b=C+c. 思路: 先计算三个数的差值的绝对值abs,如果abs大于n则肯定不行,如果小于n,还需判断(n-abs)%3是否为0,不为0则不行. #include<iostream> #include<algorithm> #include<cmath> #include<cstring> #include<vector…
A. Collecting Coins 题目链接:https://codeforces.com/contest/1294/problem/A 题意: 你有三个姐妹她们分别有 a , b , c枚硬币,你有n枚,你可以把硬币随意分给她们(必须分完),使她们的硬币数A = B = C 分析: 题目的条件有两点: ①A = B = C ②在满足①的前提下必须把硬币分完 我们首先要满足第一点.因为硬币个数有限,我们要尽可能用最少的硬币使 A = B = C,所以只要让a,b,c中小的两个等于最大的即可…
contest链接:https://codeforces.com/contest/1294 A. 给出a.b.c三个数,从n中分配给a.b.c,问能否使得a = b = c.计算a,b,c三个数的差值之和,n对其取余,判断是否为0即可. AC代码: #include<iostream> #include<vector> #include<algorithm> #include<cmath> #include<cstring> #include&l…
前置扯淡 真是神了,我半个小时切前三题(虽然还是很菜) 然后就开始看\(D\),不会: 接着看\(E\),\(dp\)看了半天,交了三次还不行 然后看\(F\):一眼\(LCA\)瞎搞,然后\(15min \space A\)掉 幸亏加时了\(10min\),否则\(F\)题\(AC\)不掉啥没有了 送我自闭,如果先全看一遍,发现\(D\)题和\(E\)题都不可做,直接刚\(F\),新年就上蓝了(然而还是菜) 题目&&解答 A.Collecting Coins link 思路 这水题吧,就…
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6035 题面: Colorful Tree Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1651    Accepted Submission(s): 675 Problem Description There is a tre…
这里有三道长得像的题: 一:HDU6036: There is a tree with nn nodes, each of which has a type of color represented by an integer, where the color of node ii is cici. The path between each two different nodes is unique, of which we define the value as the number of…
Linux tree命令用于以树状图列出目录的内容. 执行tree指令,它会列出指定目录下的所有文件,包括子目录里的文件. 语法 tree [-aACdDfFgilnNpqstux][-I <范本样式>][-P <范本样式>][目录...] 参数说明: -a 显示所有文件和目录. -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合. -C 在文件和目录清单加上色彩,便于区分各种类型. -d 显示目录名称而非内容. -D 列出文件或目录的更改时间. -f 在每个文件或目录之…
cnbb 我被数组清零卡了一天.. 子树改色询问子树颜色数.. 先考虑颜色为x的节点对祖先答案的贡献,那么我们考虑把所有这些节点都搞出来,按dfs序排序,然后考虑每个节点a掌管的祖先是它和按dfs序的下一个同色节点b的LCA以下的节点,然后每个有颜色x儿子的树都被覆盖了,而且最多覆盖一次. 在删除节点的时候考虑将所有它的儿子删去变成一棵只有根节点的树. 统计答案的时候要考虑父亲的贡献..即若这个节点的颜色在它子树中出现了答案就不+1,否则答案+1. cnbb的多组数据, fuck you. 数据…
原题链接在这里:https://leetcode.com/problems/binary-search-tree-iterator/ Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the root node of a BST. Calling next() will return the next smallest number in the BST. N…
#include<iostream> #include<cstdio> #include<algorithm> #define Max 1005 using namespace std; struct line{ double x, y1, y2; int flag; }x_line[Max]; struct node{ int l, r, flag; double x, f; }tree[Max]; double point[Max]; int n, m, xm; i…
命令原型:D:/>tree /? 以图形显示驱动器或路径的文件夹结构.TREE [drive:][path] [/F] [/A]/F 显示每个文件夹中文件的名称./A 使用 ASCII 字符,而不使用扩展字符. 应用举例:1.如果想生成某磁盘整个文件夹列表,输入以下命令:e:tree >e.txt即可生成整个磁盘的文件夹列表:如果输入以下命令:e:tree /f >e.txt2.如果想生成某个文件夹的文件列表,输入以下命令:例如想生成E盘下tools文件夹的文件列表:e:tree too…
题目链接 Problem Description There is a tree with n nodes, each of which has a type of color represented by an integer, where the color of node i is ci. The path between each two different nodes is unique, of which we define the value as the number of di…
目录 tree 最常用 带颜色显示2级目录 排除显示某个目录 tree tree -C :颜色显示 tree -f : 显示文件全路径 tree -L 2 :只显示2层 tree -P *.pl :只显示文件目录和*.pl的perl文件. tree -F :显示目录后面的:显示可执行文件*:功能类似ls -F tree -I :忽略某个目录或者文件内容,支持正则 tree -I "node_modules" tree -I "node_modules|cache|test_*…
内存池技术就是创建一个内存池,内存池中保存着可以使用的内存,可以使用数组的形式实现,然后创建一个空闲列表,开始时将内存池中所有内存放入空闲列表中,表示空闲列表中所有内存都可以使用,当不需要某一内存时,将其放入空闲列表中,使内存可以循环使用.空闲列表可以用不定长数组vector定义,内存池和空闲列表的类型由使用内存的数据决定,如果使用内存的数据是用户自定义的结构体类型,则使用此类型.由于大部分情况下是使用指针进行内存调用,所以空闲列表中存储的是相应的指针. 具体实例如下: 题目: Trees ar…