原题传送门 构造题. 明显p,q都越大越好 我们考虑每次取出度最小的点,加到尴尬聚会的集合中(因为把与它相邻的点全删了,不珂能出现认识的情况),把它自己和与自己相连的点从图上删掉(边也删掉),记下这个点的度,最后找尴尬聚会中度数最大的点,把它及在它之后删除的点加入热闹的聚会的集合中,这时p就是这个点的度数.这时p,q都较大,就珂以过了,正确性我也不会证明 #include <bits/stdc++.h> #define inf 0x3f3f3f3f #define N 10005 #defin…
分析 构造方法 (截图自UOJ群) 可以使用std::set维护这个过程,不过据说可以做到\(O(n+m)\).. 正确性证明 题目中的要求等价于\((p+1)(q+1) > n\) 设每次找出地度数最小的点的被删除时的度数分别为\(d_1,d_2,...,d_q\),显然用这些点可以构造出一个尴尬度为\(q\)的方案. 并且,我们有: \[\sum_{i=1}^{q}(d_i+1) = n\] 考虑这个度数序列取到最大值的位置,可以发现用这个点以及在这个点之后删除的点能够构造出一个热闹度为\(…
P5361 [SDOI2019]热闹又尴尬的聚会 出题人用脚造数据系列 只要将\(p\)最大的只求出来,\(q\)直接随便rand就能过 真的是 我们说说怎么求最大的\(p\),这个玩意具有很明显的单调性的吧 直接二分一下\(p\)的值,然后将其和他所以相连的所有度数\(>=p\)加进去, 可能最后有一些的点的实际度数\(<=p\) 我们就把他的贡献减掉,再出现再减 每个点只会入队一次 数据太弱,\(q\)直接随机吧 时间复杂度\(O(T(nlogn+rand)\) #include<c…
[SDOI2019]热闹又尴尬的聚会 链接 luogu loj 思路 第一问贪心?的从小到大删除入度最小的点,入度是动态的,打个标记. 当然不是最大独立集. 第二问第一问的顺序选独立集,不行就不要.选出来的一定是满足不等式的. 每次最多删除p+1个,独立集个数是\(\lceil \frac{n}{p+1} \rceil >= \lfloor \frac{n}{p+1} \rfloor\) 代码 #include <bits/stdc++.h> using namespace std; c…
热闹度\(p\)子图中最小的度数,尴尬度\(q\)独立集大小,之间的约束 \[ \begin{aligned} \lfloor n/(p+1)\rfloor\le q &\rightarrow \lceil(n-p-1+1)/(p+1)\rceil\le q\\ &\rightarrow \lceil(n-p)/(p+1)\rceil\le q\\ &\rightarrow (n-p)/(p+1)\le q\\ &\rightarrow n-p\le pq+q\\ &…
据说原数据可以让复杂度不满的暴力O(Tn^2)过掉……O(Tn^2)方法类似于codeforces一场div2的E题 有一种比较好的方法:每次找出原图G中度最小的点加入q,然后将相邻的点加入新图G'.这显然能够得到一个最大的独立集.而p可以在维护度最小的点最大这一过程中,把G的所有点加入集合p.因为set带一个log,所以复杂度为O(Tmlogn). 证明:满足(p+1)(q+1)>n即可.删除的q节点中d的度数和满足Σ(d[i]+1)=n,其中i∈q,然后max{d[i]}q>=n,于是(m…
[题解] Luogu P5446 [THUPC2018]绿绿和串串 ·题目大意 定义一个翻转操作\(f(S_n)\),表示对于一个字符串\(S_n\), 有\(f(S)= \{S_1,S_2,...,S_{n-1},S_n,S_{n-1},...S_2,S_1 \}\). 现在给定一个长度为\(n\)的字符串\(S^{'}\)表示原字符串\(S\)经过若干次(可能为0)旋转之后的一个前缀, 求原来字符串可能的长度\(l\). 显然当\(l > n\)时一定可行,所以只需要输出所有的\(l\leq…
题目链接 思路 首先观察题目最后的式子\(\lfloor \frac{n}{p + 1} \rfloor \le q\) 并且\(\lfloor \frac{n}{q+1} \rfloor \le p\). 这个式子其实就是告诉我们\(p\)和\(q\)都要尽量大. 然后这道题就可以分成两个小题: 1.求一个子图,使得图中最小度数最大. 2.求最大独立集. 先看第一个问题: 可以贪心的每次将度数最小的点删去.剩下的点中度数最小的那个就是当前图的贡献.然后找一个最大的贡献就是答案. 第二个问题 求…
原题传送门 神鱼说这道题是强制离线(smog 我们珂以把被单点修改,单点查询的点单独拿出来处理,把每个数表示成\(mul*x+plus\) 初始状态下\(mul=1,plus=0\) 操作1:在总和中减去\(val[pos[x]]\)(\(pos\)表示离散化后的位置,\(val\)表示特殊点的数值):将\(val[pos[x]]\)变成\(\frac{val_{new}-plus}{mul}\):如果\(pos[x]\)不在非零位置的栈中,将\(pos[x]\)压入栈中:在总和中加上\(val…
原题传送门 每次查询的实际就是将地图的一个前缀和一个后缀合并后的图的最小生成树边权和 我们要预处理每个前缀和后缀的最小生成树 实际求前缀和(后缀和)的过程珂以理解为上一个前缀和这一列的最小生成树进行合并,实际最后前缀和后缀合并也是这样 如果暴力进行合并的话,每次边数是nm级别的,明显会TLE和MLE 我们考虑一下,实际每次合并主要和最左.最右两列(称这些点为关键点)有关,每次合并,原来最小生树中有可能会有一些边要删掉使得合并后是最小生成树.感性理解一下,珂能删掉的边一定在两个关键点在原来最小生成…