首页 > 其他分享 >Sasha and the Happy Tree Cutting

Sasha and the Happy Tree Cutting

时间:2024-02-20 09:45:07浏览次数:23  
标签:Tree Sasha Cutting 树上 虚树 dp Happy

题目只出现了一些关键点,所以想到虚树,我们对关键点建立虚树,会发现对虚树上的一条边\((u,v)\),在原图中\(u\)到\(v\)的路径只用最多选择一条就可以了,所以我们就发现,有效的边的个数就是虚树上的边,是\(O(k)\)的

然后看一下\(k\)的范围,想到状态压缩,对每一个状态\(S\),枚举虚树中的每一条边,假设选取这条边能够覆盖的题目中的指定路径的集合是\(p\),则有\(dp[S|p]=min(dp[S|p],dp[s]+1)\)

提醒一点,在虚树上DP的时候,一定每时每刻记住,虚树上的点是\(a[i]\),而不是\(i\)!

标签:Tree,Sasha,Cutting,树上,虚树,dp,Happy
From: https://www.cnblogs.com/dingxingdi/p/18022424

相关文章

  • Java集合篇之set,面试官:请说一说HashSet、LinkedHashSet、TreeSet的区别?
    写在开头Java的集合世界中主要由List,Set,Queue,Map构成,我们在之前的博文中已经学习了List,接下来我们继续学习Set集合。Set特点:存取无序,不可以存放重复的元素,不可以用下标对元素进行操作HashSet作为Set容器的代表子类,HashSet经常被用到,我们通过源码去分析它【源码查看】public......
  • CF396C On Changing Tree
    看到距离有关可以联想到跟深度有关系,可以用深度表示距离关系。假设现在有一操作1vxk,那么对于v下一点u,设dep[v]为v的深度,那么两点间距离就是dep[u]-dep[v],于是u点就会增加\(x-k*(dep[u]-dep[v])=x-k*dep[u]+k*dep[v]\)。由此来看,只需要把v一下的\(sum1\)都加上\(x-dep[u]\),......
  • [ARC108F] Paint Tree
    本题有两种思路。首先,对于普通的树,到一个点最远的点一定是直径的端点之一。记\(S\)表示直径长度。做法\(1\)先求出一条直径,若直径的两个端点颜色相同,则最长距离一定为直径。否则,令两个端点分别为\(x,y\),并钦定\(x,y\)不同色。枚举答案\(d\),所有到\(x\)距离\(>d\)的......
  • TreeMap排序
    实现TreeMap后默认为key升序排序,如果要实现key其他排序规则,可以使用Comparator对象作为参数,前提是key为可以排序的类型(String,int等类型)1Map<String,People>map=newTreeMap<>(newComparator<String>(){2@Override3publicintcompare(finalStringo1,final......
  • Check if a given binary tree is BST【2月14日学习笔记】
    点击查看代码//CheckifagivenbinarytreeisBST#include<iostream>#defineMIN-999999#defineMAX999999structnode{intdata;node*left;node*right;};node*getnewnode(intx){node*temp=newnode;temp->data=x;......
  • JDK21报错 java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTre
    JDK21报错java:java.lang.NoSuchFieldError:Classcom.sun.tools.javac.tree.JCTree$JCImportdoesnothavememberfield'com.sun.tools.javac.tree.JCTreequalid'Lombok版本兼容性的问题导致Maven依赖改为新版本<dependency><groupId>org.projectlombok&l......
  • 迎龙年浅谈 Binary Indexed Trees
    什么是BinaryIndexedTrees?就是树状数组啦。树状数组,是一种高级数据结构,用于高效地解决某一类问题。那么这一类问题是什么呢?那么让我们一起来看一下:问题引入给定一个序列\(a\),给定\(Q\)个\(l,r\),求\(\sum_{i=l}^ra_i\)。这一类问题,我们明显可以暴力枚举,时间复杂度为......
  • CF1918F Caterpillar on a Tree
    题意简述你想要遍历一棵大小为\(n\)的树,初始在根节点\(1\),每次你可以花费\(1\)从一个点通过一条边到达另一个点,或者花费\(0\)传送到根节点。求完成遍历的最小代价。\(n\le2\times10^5,k\le10^9\)。分析首先,传送门肯定是在叶子节点使用。其次,遍历顺序是按照子树的深......
  • Link Cut Tree模板(从别人那里拿的)
    可以通过这道题#include<bits/stdc++.h>#defineRregisterint#defineIinlinevoid#defineGif(++ip==ie)if(fread(ip=buf,1,SZ,stdin))#definelcc[x][0]#definercc[x][1]usingnamespacestd;constintSZ=1<<19,N=3e5+9;charbuf[SZ],*ie=buf+SZ,*ip=......
  • P9663 Permutation on Tree 题解
    考虑枚举一个\(x\in[1,n)\),将\(\leqx\)的看作\(0\),\(>x\)的看作\(1\),那么一个排列的贡献实际上就是\(\sum_{x=1}^{n-1}\sum[[p_i\leqx]+[p_{i+1}>x]=1]\)。那么问题转变为一个给定一棵树,每一个点有权值\(0\)或\(1\),求所有排布方案的贡献之和。设\(f_x\)表示......