codeforces708C】的更多相关文章

题目链接 题意:给定一棵n个结点的树,问:对于每个结点,能否通过删除一条边并添加一条边使得仍是树,并且删除该结点后得到的各个连通分量结点数 <= n/2? 题解:树形dp,两遍dfs,第一遍dfs求得以各个结点为根的子树的结点数,以及各个结点下面切掉某条边后最多可切出多少个结点: 第二遍dfs求得每个结点上面切掉某条边后最多可切出多少个结点. #include <bits/stdc++.h> using namespace std; #define X first #define Y s…
一.题意 给定一颗树,对于每一个节点,判断能否在树中删除某一条边,然后在任意两个节点之间加一条边,使这个点成为重心. 注:删除树中某一条边后,标程并不会这么无聊地把这棵树变成两个孤立的连通图,而是再让所有节点组合成一棵树.如果在本来就连通的节点之间再连一条边,形成一个图,那必定会造成所有节点之间不能相互连通,那当前枚举的节点肯定不能成为重心.而如果再形成一个图,当前枚举的节点还有可能成为重心,何乐而不为呢? 二.思路 这题我做了很多遍,换了很多种思路,也看了网上其他人很多题解,仍然没看懂.后来,…
CF708C Centroids 题意翻译 给定一颗树,你有一次将树改造的机会,改造的意思是删去一条边,再加入一条边,保证改造后还是一棵树. 请问有多少点可以通过改造,成为这颗树的中心?(如果以某个点为根,每个子树的大小都小于n/2​,则称某个点为中心) sol:先找到整颗树的重心,然后对于每个点,肯定是把重心的最大子树串过来最优(XJByy一下),如果这个点在最大子树中,就搞来次大子树,或者把除了最大子树的剩下一大坨串过来 #include <bits/stdc++.h> using nam…