树的经典问题
流浪小林
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #693 (Div. 3)G. Moving to the Capital
题目链接:Problem - G - Codeforces 题目大意:给定一张n个节点m条边的图,定义d数组为每个结点到结点1的距离。 每次可以选择两个操作:1,跳到结点x,dx>d当前 2.跳到结点x,dx<=d当前 注意:操作2最多只能执行1次。求每个点经过操作后到结点1的最小距离考察知识点:树的广搜,dp思维 题解:首先我们先对树进行广搜,计算出每个点到根节点的距离,然后我们根据距离从大到小进行遍历。对于父亲结点u和儿子节点v,如果d[u]<d[v],f[u]=min(f[u原创 2022-02-18 16:19:06 · 623 阅读 · 0 评论 -
Codeforces Round #549 (Div. 2) C. Queen
题目大意:给定一棵n个结点的树,每个点输入p和c,其中p代表第i个结点的父亲结点,c为0或1,1表示结点i不尊重他的父亲,0表示尊重他的父亲。请将这样的结点按照从小到大的顺序进行输出:i不尊重他的父亲且他的所有儿子都不尊重他。 题解:这题其实很简单,我们可以开两个数组resp和berp分别表示结点i是否尊重他的父亲以及结点i是否受他的儿子尊重,然后dfs进行搜索,将符合条件的点记录并且输出。 #include<bits/stdc++.h> using namespace std; co..原创 2022-02-14 17:28:53 · 222 阅读 · 0 评论 -
codeforce C. Ehab and Path-etic MEXs
题目大意:有一颗n个结点的树 ,现在让你分配每条边的权重,使得任意两个点之间的所有边的MEX值尽可能的小。 题解:寻找两个隶属于同一父亲的叶子节点,将两条边分别赋值为0和1,那么所有路径上的MEX值最大为1。显然由于0的存在,MEX不可能为0,所以1就是最小值。 #include<bits/stdc++.h> using namespace std; const int maxn = 2e5 + 10; vector<int>g[maxn]; struct n...原创 2022-02-14 16:42:55 · 370 阅读 · 0 评论 -
A. Linova and Kingdom
题目大意:给定n个城市,其中有k个工业城市,n-k个旅游城市,求从所有工业城市到首都(1)的过程中经过的旅游城市之和的最大值。 题解: 1,根据贪心的策略,工业城市与旅游城市的父子关系是确定的,旅游城市为父亲结点而工业城市为儿子结点。(可以利用反证法证明) 2,基于结论1,我们可以定义每一个点的权重为:该点到1的距离-该点的子节点个数,然后我们选择k个最大的结点即可。 注意答案要开long long #include<bits/stdc++.h> using namespace...原创 2022-02-14 13:57:55 · 401 阅读 · 0 评论