CF613D Kingdom and its Cities 虚树】的更多相关文章

LINK:Kingdom and its Cities 发现是一个树上关键点问题 所以考虑虚树刚好也有标志\(\sum k\leq 100000\)即关键点总数的限制. 首先当k==1时 答案显然为0. 然后考虑无解情况 容易发现这种情况是两个点同时为关键点 那么我们只需要判断是否存在两个点相连的情况就好了. 这个可以在建立虚树时候判断 我多此一举了 直接标记父亲然后判断父亲是否存在. 接下来考虑如何统计答案. 可以从下往上观察 在某个点处统计儿子们的贡献. 假设儿子都是关键点 考虑当前点是否是…
传送门 $\sum k \leq 100000$虚树套路题 设$f_{i,0/1}$表示处理完$i$以及其所在子树的问题,且处理完后$i$所在子树内是否存在$1$个关键点满足它到$i$的路径上不存在任何点被封的最小代价. 转移考虑$i$是否是关键点以及是否封$i$号点. 注意判断相邻两个点同时是关键点的情况.同时需要注意:如果虚树上两个点不相邻,可以封这两个点之间的点. #include<bits/stdc++.h> //This code is written by Itst using n…
Code: #include<bits/stdc++.h> #define ll long long #define maxn 300003 #define RG register using namespace std; inline int read() { RG int x=0,t=1;RG char ch=getchar(); while((ch<'0'||ch>'9')&&ch!='-')ch=getchar(); if(ch=='-')t=-1,ch=g…
[CF613D]Kingdom and its Cities 题意:给你一棵树,每次询问给出k个关键点,问做多干掉多少个非关键点才能使得所有关键点两两不连通. $n,\sum k\le 10^5$ 题解:刷虚树板子啦! 首先如果两个关键点相邻则无解.然后建出虚树,进行树形DP.设f[i]表示i子树中的关键点都不连通,且i子树中的点与外面的点也不连通的最小花费,g[i]表示i子树重的关键点都不连通,且子树中只有一个点与外面的点连通的最小花费.转移时讨论一波即可. #include <cstdio>…
Description 一个王国有n座城市,城市之间由n-1条道路相连,形成一个树结构,国王决定将一些城市设为重要城市. 这个国家有的时候会遭受外敌入侵,重要城市由于加强了防护,一定不会被占领.而非重要城市一旦被占领,这座城市就不能通行. 国王定了若干选择重要城市的计划,他想知道,对于每个计划,外敌至少要占领多少个非重要城市,才会导致重要城市之间两两不连通.如果外敌无论如何都不可能导致这种局面,输出-1 Input 第一行$n$. 后面$n-1$行给出树边 再一行$m$,后面给出$m$组询问,…
很休闲的一个题啊 其实一看到关于\(\sum k\)的限制,就知道是个虚树的题了 首先我们把虚树建出来,然后考虑怎么计算个数呢? 我们令\(f[x]\)表示以\(x\)的子树中,剩余了多少个还没有切断的关键点 首先,如果当前点是一个关键点的话,那么他所有的\(f[son]!=0\)的儿子都需要割掉,而且当前点的\(f[x]\)应该是1(因为只能删除非关键点) 如果当前点不是一个关键点的话,如果他有一个\(f[x]\)不为0的儿子,那么\(f[x]=f[son]\),不然的话,就需要把这个点删掉(…
description 题面 data range \[n, q,\sum k\le 10^5\] solution 还是虚树的练手题 \(f[0/1][u]\)表示\(u\)的子树内,\(u\)是否和重要城市连通的最小分割代价 分类讨论有点捉急 code #include<bits/stdc++.h> #include<algorithm> #include<iostream> #include<cstdlib> #include<iomanip&g…
[CF613D]Kingdom and its Cities(虚树,动态规划) 题面 洛谷 CF 翻译洛谷上有啦 题解 每次构建虚树,首先特判无解,也就是关键点中存在父子关系. 考虑\(dp\),设\(f[i]\)表示解决\(i\)子树以内的最小点数 再用一个数组\(g[i]\)表示\(i\)的子树中还未阻断的点数 \(f[u]=\sum f[v],g[u]=\sum g[v]\) 考虑转移, 如果\(u\)不是关键点,并且\(v>1\) 那么,当前点必须放置,\(f[u]+=1,g[u]=0\…
Meanwhile, the kingdom of K is getting ready for the marriage of the King's daughter. However, in order not to lose face in front of the relatives, the King should first finish reforms in his kingdom. As the King can not wait for his daughter's marri…
题目链接:http://codeforces.com/contest/613/problem/D 题意概述: 给出一棵树,每次询问一些点,计算最少删除几个点可以让询问的点两两不连通,无解输出-1.保证询问的点总数不大于300000. 分析: 先考虑遍历的做法,统计每个点代表的子树中联通询问点的数量. 这个点不是询问点:如果有至少两个不同的子树中有询问点那么当前点一定被删除,因为这个时候不删除之后这两个点就是联通的:同时除了在更深的地方遇见第一种情况之外没有必要删除那些点:没有点不用管,只有一个点…