![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树
pubgoso
这个作者很懒,什么都没留下…
展开
-
2018-2019 ACM-ICPC, Asia Dhaka Regional Contest F - Path Intersection 树上路径交
题目链接思路:直接上树上路径交的模板。或者树剖+线段树#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 2e5 + 10;#define fi first#define se second#define pb push_back#define wzh(x) cerr<&原创 2020-11-05 13:10:53 · 212 阅读 · 0 评论 -
2019ICPC徐州 K.Kill the tree 树的重心
题目链接思路:树中所有点到某个点的距离和中,到重心的距离和是最小的;如果有两个重心,那么他们的距离和一样。那么题目所求的就是每颗子树的重心了。dfs的时候求出每个子树的重心和最短距离,考虑怎么合并所有子树。这时候要用到第二个性质了:把一个树添加或删除一个叶子,那么它的重心最多只移动一条边的距离。那么这样就相当于重心在往上爬,我们可以让重心一直跳,找到根在这个子树上时,最短的距离和。对所有子树处理一遍就能找到最小距离和所有的重心了。转移的时候自己推一推贡献即可。#pragma GCC opti原创 2020-10-21 22:17:09 · 218 阅读 · 0 评论 -
Codeforces Round #617 (Div. 3) F. Berland Beauty
题目链接题意:给你一颗树和一些限制,让你构造每个边的边权满足 限制。限制:a−>ba->ba−>b的最短路径上的最小边权等于ccc.思路:把所有限制按照c从大到小排序,然后依次遍历所有限制,对每条路径上没有赋值的赋值成当前的c。如果都有值且值都大于c,那显然无解。细节见代码:#include <bits/stdc++.h>using namespace s...原创 2020-02-17 11:38:12 · 185 阅读 · 0 评论 -
Educational Codeforces Round 25 G. Tree Queries
题目链接大意:给你一颗树和一些操作(初始所有节点都是白色)1:把vvv点染成黑色2:找到一个最小节点编号yyy,使得xxx到某个黑色节点到最短路径上存在节点yyy.思路:我们把第一个变成黑色节点到点 设为根节点,然后求出根节点到所有点的路径上到最小节点编号,设为数组fff,那么如果没有其他黑点的话,那么f[x]f[x]f[x]就是询问点xxx的答案了。如果存在别的黑点xxx,那么显然xxx...原创 2020-01-03 16:22:22 · 108 阅读 · 0 评论 -
牛客练习赛55E.树
题目链接题解如下:本人的做法比题解麻烦一点,也由于一个小地方的错误,导致博主调了很久。。。。。其实也没什么好说的,细节题。注意细节就行了,唯一的思维点就是转化问题,这个转化以前都没有接触过,是我太笨了。。主要计算过程都写了注释细节见代码:#include<bits/stdc++.h>typedef long long LL;#define fi first#de...原创 2019-12-14 16:09:08 · 192 阅读 · 0 评论 -
洛谷P3384 【模板】树链剖分
题目链接很早就想学的模板,由于懒拖到现在(其实是菜)树链剖分其实是将树形结构处理成线性序列然后用数据结构来维护树的一个东西。可以解决很多树上问题。具体重要的三个函数为:一.dfs1第一遍dfs遍历这颗树,处理出每个点的子树大小(包含自己)为sizsizsiz,节点的父亲节点为fafafa,节点的深度为dedede,还有每个节点的重儿子(siz值最大的儿子)void dfs1(int n...原创 2019-08-06 15:59:58 · 180 阅读 · 0 评论 -
hdu6567 Cotree (树dp换根+思维)
题目链接大意:给你两个不连通的树,让你加一条边,使得两个树联通,并且使得∑in∑i+1ndis(i,j)\sum_i^n\sum_{i+1}^ndis(i,j)∑in∑i+1ndis(i,j)最小。思路:首先我们需要一个dfs将两个联通块的点求出来,然后再用一个dfs求出以每个点的子节点个数,和每个点的子节点的dis之和,用两个数组,cnt数组记录子节点个数,dp数组记录子节点的dis之和...原创 2019-07-21 22:34:00 · 708 阅读 · 0 评论 -
Codeforces Round #484 (Div. 2)Cut 'em all!(dfs)
题目链接题意:给你一棵树,让你尽可能删除多的边使得剩余所有的联通组件都是偶数大小。思路:考虑dfs,从1出发,若当前节点的子节点和自己的数目是偶数,说明当前节点和父亲节点的边是可以删除的,答案+1,因为最开始的节点没有父节点,所以最后答案-1#include<bits/stdc++.h>#define LL long long#define fi first#define...原创 2019-04-16 10:56:24 · 95 阅读 · 0 评论 -
Codeforces Round #551 (Div. 2) D. Serval and Rooted Tree (树形dp)
题目链接题意:给你一个有根树,假设有k个叶子节点,你可以给每个叶子节点编个号,要求编号不重复且在1-k以内。然后根据节点的max,minmax,minmax,min信息更新节点的值,要求根节点的值最大。解法:考虑树形dp,若当前节点是nownownow,我们可以假设编号最大的一些数分布在当前节点的子节点中,显然,若当前节点为叶子节点,那么这个这个编号就是最大的。然后往上回溯,假设当前节点取得是...原创 2019-04-15 23:55:01 · 103 阅读 · 0 评论 -
Codeforces Round #527 (Div. 3) . F Tree with Maximum Cost
题目链接题意:给你一棵树,让你找一个顶点iii,使得这个点的∑dis(i,j)∗a[j]\sum dis(i,j)*a[j]∑dis(i,j)∗a[j]最大。dis(i,j)dis(i,j)dis(i,j)为iii到jjj的距离。思路:题解还是好看啊 先从1开始搜,预处理出当1为根的时候的答案记为resresres,递归的过程中假设当前节点为iii,那么sum[i]sum[i]sum[i]数组...原创 2019-03-19 20:21:28 · 112 阅读 · 0 评论 -
蓝桥杯 大臣的旅费
看完题,大概就懂是求树的直径了,然后求树的直径,就自己选方法了。。。。。。(从网上抄的)#include<bits/stdc++.h>#define LL long long#define fi first#define se second#define mp make_pair#define pb push_backusing namespace std;LL ...原创 2019-03-07 21:24:38 · 324 阅读 · 0 评论 -
CF 1060E. Sergey and Subway
题目链接题意:给你一棵树,然后连接两个有公共邻居的点,问你连完后,任意两点的距离之和。一开始看这种题,还不怎么会做,借鉴了这位大佬的博客,get到了新技能,当我们求树上任意俩点的距离之时,可以转化问题,不看点,而看边,每条边的使用次数是固定的,每条边使用的次数为:这条边左边的顶点数*右边的顶点数,而由于我们可以将相隔一个点的两个点连起来,所以,如果是偶数的距离,我们可以2个2个跳,就是距离的一...原创 2019-02-21 16:02:48 · 167 阅读 · 0 评论