首页 > 其他分享 >Codeforces 杂题

Codeforces 杂题

时间:2024-10-04 17:34:46浏览次数:6  
标签:所有 texttt Codeforces Tag 子树 回路 杂题 欧拉

CF1994E

\(*2000, \texttt{Tag:}\) 贪心,位运算

题意:

给出一片森林,每次你可以选择一个点删去它的子树,求所有删去的子树大小的按位或结果的最大值。

Solution

按位或可以看做在二进制下的不进位加法,因此,若一棵树不管怎么拆分,它拆分出来的子树大小或的结果不会大于它本身。

若一棵树的大小为 \(\texttt{siz}\),我们可以轻易构造出所有在 \([1,\texttt{siz}]\) 间的数。
因此,直接贪心的从高到低按位考虑,如果能取到这一位,任意选一棵子树去除这一位即可。

时间复杂度 \(O(n\log m)\)。

Submisson

CF1994F

\(*2500, \texttt{Tag:}\) 构造,贪心,树,欧拉回路

Perface

一个很经典的 Trick 题。不妨看看这道题:abc345f

这题其实就是上面那题和欧拉回路的复合题。

Solution

考虑一个图是欧拉回路仅当所有点度数为偶数。

然后必选的边先选上,由于题目保证是连通图,所以相当于按 \(2\) 取模后,选一些边,然后所有点度数为偶数。

容易处理出选完所有必选边的情况后,变成一个 \(01\) 问题,选一条边相当于让两个端点异或 \(1\),合法仅当所有点为 \(0\),经典的结论就是只要两个点联通就能互相点掉,构造方案就是将路径上所有边状态取不取取反即可,然后把有的边留下来跑欧拉回路即可。

\(O(n)\)。
code

CF1995D

\(*2300, \texttt{Tag:}\) 字符串,SOSdp

Solution

不妨把所有子串的结尾的位置放在一个集合 \(S\) 中。

一个很经典的结论就是考虑一个必要条件,就是 \(\forall p\in[1,n-k],[p,p+k]\cap S\ne \emptyset\),而且 \(n\in S\)。

反证一下就发现这是个充要条件,因此考虑反过来思考,记录一个状态 \(f_{mask}\) 表示对于 \(mask\) 这个集合不选集合中的所有字母是否合法,同意发现一个集合不合法它的超集也不合法,跑一次子集 dp 然后判断删除最多的字母即可。

时间复杂度 \(O(k2^k)\)。
PS:这题放过了暴力枚举子集的 \(O(3^k)\) 做法。

code

标签:所有,texttt,Codeforces,Tag,子树,回路,杂题,欧拉
From: https://www.cnblogs.com/g1ove/p/18446927

相关文章

  • 「杂题乱刷2」CF1227D2
    题目链接CF1227D1OptimalSubsequences(HardVersion)*1600CF1227D2OptimalSubsequences(HardVersion)*1800解题思路本篇题解分D1,D2两个部分来写。D1sol:我们容易发现有以下两点性质:要想子序列和最大,必须选择前\(k\)大的数字。比第\(k\)大的数字还要大......
  • 【处理元组有关的题型的技巧】codeforces 1677 A. Tokitsukaze and Strange Inequalit
    题意第一行输入一个正整数\(T(1\leqT\leq1000)\),代表共有\(T\)组测试用例,对于每组测试用例:第一行输入一个正整数\(n(4\leqn\leq5000)\),第二行输入\(n\)个正整数\(p_i(1\leqp_i\leqn)\)。对于\(1\leqi<j<k<l\leqn\),若有\(a_i<a_k,a_j>a_l\)成......
  • 「杂题乱刷2」CF1433F
    题目链接CF1433FZeroRemainderSum(*2100)解题思路简单dp,只是状态有点多。首先我们根据题目里的定义,可以构造\(dp1_{i,j,a,b}\)表示考虑到第\(i\)行前\(j\)列当前所选数之和模\(k\)为\(a\)且此时选了\(l\)个数的最大选取数字之和。那么这样,我们就可以求出每......
  • Codeforces2020D Connect the Dots(观察 + 并查集 + 差分)
    题意多组数据。数轴上有\(n\)个点,编号为\(1\simn\),对这些点做$m$次操作。每次操作给出三个整数\(a_i(1\lea_i\len)\\\d_i(1\led_i\le10)\\\k_i(0\lek_i\len)\)。将点\(a_i,a_i+d_i,a_i+2\timesd_i,a_i+3\timesd_i,\cdot\cdot\cdo......
  • Codeforces Round 972 (Div. 2)
    一万一参赛,VP赛时136A.SimplePalindrome简单构造题。字母集是5,相同字母间一定构成若干回文子串。将相同字母排列在一起,则只有相同字母可以构成回文子串。显然,优先添加较少的字母即可。#include<bits/stdc++.h>usingnamespacestd;intT,n;chars[5]={'a','e','i......
  • Educational Codeforces Round 95 (Rated for Div. 2) G. Three Occurrences
    首先我们随机两个数组\(valA_x,valB_x\)。对于数组\(a\),记\(cnt\)表示\(a_i\)在前缀中出现的次数。若\(cnt\equiv0\mod3\),则\(b_i=valA_x\)若\(cnt\equiv1\mod3\),则\(b_i=valB_x\)若\(cnt\equiv2\mod3\),则\(b_i=valA_x\oplusvalB_x\)记\(pre_i\)表示\(b\)的前......
  • 「杂题乱刷2」CF827B
    题目链接CF827B解题思路假设树以\(1\)为根,考虑先将\(k\)个深度为\(1\)的节点,然后我们就可以将剩余的节点挂在目前的叶子节点上,但是如果一个叶子节点挂了\(2\)个叶子节点的话,那么这样叶子节点数目你一定不能使叶子节点减少,因此一个叶子节点最多只能往下挂一个节点,因此你......
  • Codeforces Round 976 (Div. 2)
    C.BitwiseBalancing(C)先求出\(b-c\)的值,再考虑\(a\)的每个二进制位取0或1对答案的影响。vp的时候不知道为什么错了很多次。voidsolve(){llb,c,d;scanf("%lld%lld%lld",&b,&c,&d);if(b-c>d){printf("-1\n");retur......
  • Codeforces Round 976 (Div. 2)
    一万五参赛,VP赛时629(唐了,E没想出来)A.FindMinimumOperations简单题。注意特判,用除法统计答案即可。#include<bits/stdc++.h>usingnamespacestd;intT,n,k;intmain(){ scanf("%d",&T); while(T--){ scanf("%d%d",&n,&k); if(k==1||n......
  • Codeforces Round 976 (Div. 2) 题解
    CodeforcesRound976(Div.2)题解2020B一个常见的想法:开关灯=异或,虽然在这道题里没啥用注意到,第i盏灯的按钮被按的次数就是i的除它本身以外的因子个数而完全平方数的因子数为奇数,其他数的因子数为偶数点击查看更多信息#include<bits/stdc++.h>usingnamespacestd;voi......