codeforces edu 2200-2800 做题记录(持续更新)

誓要暑假刷穿 edu 2200 - 2800

图论

E. Square Root of Permutation
题意:
在这里插入图片描述
思路: i 向 p i p_i pi 连边建图,分类讨论环的数量

有向图强连通 / 无向图双连通

E. Pursuit For Artifacts
题意:在这里插入图片描述
思路: 无向图双连通,tarjan缩点之后是一颗树,从根节点dfs就可以

二分图

F. Edge coloring of bipartite graph
题意: 给你一个二分图,边染色让相邻边颜色不同

结论: 颜色数量最多 max ⁡ d u \max d_u maxdu(度的大小)
思路: 枚举度数然后确定 a n s ans ans ,枚举每一个点对之间边的颜色是否染色,枚举颜色编号确定边的染色编号

网络流

F. Bear and Fair Set
题意:在这里插入图片描述
结论: l − r l-r lr m o d    5 = j \mod 5=j mod5=j 的个数有 ⌊ r − j 5 ⌋ − ⌊ l − j 5 ⌋ \lfloor\frac{r - j}{5}\rfloor-\lfloor\frac{l - j}{5}\rfloor 5rj5lj 个, c a l c ( l , r , j ) calc(l, r, j) calc(l,r,j)表示 l − r l-r lr m o d    5 = j \mod 5=j mod5=j的个数
思路: 定义 i d i id_i idi 图中表示 m o d    5 = i \mod5 = i mod5=i 的点的 id
对于 q i = { u i , t i } , q 0 = { 0 , 0 } , q m + 1 = { b , n } q_i = \{u_i, t_i\},q_0 = \{0, 0\},q_{m + 1} = \{b, n\} qi={ui,ti}q0={0,0}qm+1={b,n},按 u i u_i ui排序
从 S 向 i 建边,流量为 t i − t i − 1 t_i-t_{i-1} titi1
从 i 向 i d j , { j = 0 , 1 , 2 , 3 , 4 } id_j,\{j = 0,1,2,3,4\} idj,{j=0,1,2,3,4}建边,流量为 c a l c ( u i − 1 , u i , j ) calc(u_{i-1},u_i,j) calc(ui1,ui,j)
所以,如果 t i − t i − 1 < 0 t_i-t_{i-1} <0 titi1<0 或者 u i − u i − 1 < t i − t i − 1 u_i-u_{i-1}<t_i-t_{i-1} uiui1<titi1,就肯定unfair
i d j id_j idj向 E 建边,流量为 n 5 \frac{n}{5} 5n
跑一遍最大流,如果结果是n那就fair,否则就unfair

拓扑排序

E. Minimal Labels
题意:
在这里插入图片描述
思路: 考虑按照入度进行拓扑排序,但是要求字典序最小,所以排序的时候用优先队列维护最小的下标

数据结构

线段树

F. Frogs and mosquitoes
题意:在这里插入图片描述
思路: 坐标离散化,线段树维护某点能到达的最右点的坐标

李超线段树

F. Lena and Queries
题意:
在这里插入图片描述
思路:
虽然是一眼李超线段树,但是李超线段树不支持删除操作,所以需要线段树分治来离线一下
但是!可以凸包做,很显然,我不会计算几何

最小生成树

F. Magic Matrix
题意:在这里插入图片描述
思路: 这有啥思路啊,就最小生成树

动态规划、

https://codeforc.es/contest/845/problem/F
题意:在这里插入图片描述

D. Two Melodies
题意:
在这里插入图片描述
思路: 枚举中间点 m i d mid mid j j j f [ i ] [ j ] f[i][j] f[i][j]表示区间 [ i , j ] [i,j] [i,j] [ i , k ] , [ k + 1 , r ] [i,k],[k+1,r] [i,k],[k+1,r]两个区间最长子序列和
n 1 [ x ] n1[x] n1[x] 表示 x x x 的最长子序列, n 2 [ x ] n2[x] n2[x] 表示 a i % 7 a_i\%7 ai%7的最长子序列,所以 f [ i ] [ j ] = m a x ( f [ i ] [ j ] , n 1 [ x + 1 ] + 1 , n 1 [ x − 1 ] + 1 , n 2 [ x % 7 ] + 1 f[i][j]=max(f[i][j],n1[x+1]+1,n1[x-1]+1,n2[x\%7]+1 f[i][j]=max(f[i][j],n1[x+1]+1,n1[x1]+1,n2[x%7]+1
然后再让 f [ j ] [ i ] = f [ i ] [ j ] f[j][i]=f[i][j] f[j][i]=f[i][j]就把区间调转一下

单调队列优化

F. Mice and Holes
题意:
在这里插入图片描述
思路: f [ i ] [ j ] f[i][j] f[i][j]表示前i个洞进前j个老鼠的最小贡献, s u m [ i ] [ j ] sum[i][j] sum[i][j]表示前j个老鼠进第i个洞的贡献
f [ i ] [ j ] = m i n ( f [ i − 1 ] [ j ] , f [ i ] [ k ] + s u m [ i ] [ j ] − s u m [ i ] [ k ] ) f[i][j]=min(f[i-1][j],f[i][k]+sum[i][j]-sum[i][k]) f[i][j]=min(f[i1][j],f[i][k]+sum[i][j]sum[i][k])

背包

E. Selling Souvenirs
题意:
在这里插入图片描述
思路:
首先讲一下二分解法:
首先,重量只有三种,把三种按价格排序
枚举其中一种,另外两种的价格会形成一个单峰函数,把这个函数二分就可以得到这个函数的平台
其次,看到了一个很有意思的题解(已测,能过)
在这里插入图片描述

E. Thief in a Shop
题意: 在这里插入图片描述
思路: a i a_i ai sort之后,枚举空间大小,然后取min, f ( i ) f(i) f(i)表示选价值为i的物品时的最小物品数量

状压

E. Another Sith Tournament
题意:在这里插入图片描述
思路: 状压

树形

E. Chemistry in Berland
题意:在这里插入图片描述
思路:
在这里插入图片描述

数论

线性基

G. Shortest Path Problem?
题目:在这里插入图片描述
思路: P4151 [WC2011] 最大XOR和路径这个题是求最大异或和,cf的这个是最小异或和,可以先做完那个然后顺便把这个ac了

计数

E. Colored Balls
题意:
在这里插入图片描述
思路: 分成 x , x + 1 x,x+1 x,x+1两个部分计数,看看是不是能分成 x , x + 1 x,x+1 x,x+1两个部分,然后求和

F. Couple Cover
题意:
在这里插入图片描述
思路: 暴力枚举每一个 a i a_i ai然后枚举 k ∗ a i k*a_i kai加进去
答案就是全选 n ∗ ( n − 1 ) n * (n-1) n(n1)减去达不到的 n u m [ p − 1 ] num[p-1] num[p1]

F. Four Divisors
首先,这个题,我用 M e i s s e l – L e h m e r Meissel–Lehmer MeisselLehmer过的,但是好像说是可以min25筛(能不用脑子为什么要用脑子呢)
(min25筛就交给以后的我再学习吧)
题意:
在这里插入图片描述
思路: 这个很显然可以分成两个东西进行讨论
1、 p 3 p^3 p3
2、 p 1 ∗ p 2 p_1*p_2 p1p2
这样就可以用这个 M e i s s e l – L e h m e r Meissel–Lehmer MeisselLehmer算法筛出来了,记一下时间复杂度
在这里插入图片描述

字符串

KMP

G. Anthem of Berland
题意:在这里插入图片描述
思路: kmp上dp
首先 f [ i ] f[i] f[i]肯定是从前面转移过来的,但是他不一定是 f [ i − m + 1 ] + 1 f[i-m+1]+1 f[im+1]+1,就是说他可能有一个共同的前缀,所以就是他是从他前一个失配指针位置上传过来的 g [ i ] = m a x ( g [ i ] , g [ i − ( m − j ) + 1 ] + 1 ) , f [ i ] = m a x ( f [ i ] , g [ i ] ) g[i] = max(g[i],g[i - (m-j)+1]+1),f[i]=max(f[i],g[i]) g[i]=max(g[i],g[i(mj)+1]+1),f[i]=max(f[i],g[i])

F. String Compression
题意:
在这里插入图片描述
思路“ KMP上dp

trie树

E. Beautiful Subarrays
首先:好题,好典
题意:
在这里插入图片描述
思路: 前缀和,trie树上统计某个前缀和个数,然后插入,反复重复这个过程

位运算

F. Xors on Segments
题意:在这里插入图片描述
结论: 定义 f ( x ) = ( 1 ∧ 2 ∧ 3 ∧ 4... ∧ x ) f(x) = (1\wedge2\wedge3\wedge4...\wedge x) f(x)=(1234...x)
f ( r ) ∧ f ( l − 1 ) = f ( l , r ) f(r)\wedge f(l - 1) = f(l, r) f(r)f(l1)=f(l,r)

思路: 预处理前缀和,离线,枚举 a i a_i ai n 2 n^2 n2枚举出 a i − a j a_i-a_j aiaj 的区间xor,枚举 l j , r j l_j,r_j lj,rj 确定最大值

构造

思维

E. Fire in the City
题意:
在这里插入图片描述
思路: 二分

G. Tree Queries
题意:
在这里插入图片描述
思路: 把第一个黑色点设为根节点
那么最小下标只会出现在三个位置
1、x到根节点的路径上
2、x到某黑色点y的 l c a lca lca路径上
3、某黑色点y到x的 l c a lca lca路径上
那么我们可以观察到,其实也可以变成三段:
1、 l c a lca lca到根
2、x到 l c a lca lca
3、y到 l c a lca lca
转换一下思路,就是说:
如果是1的话,那么也就是x到根,也是y到根
如果是2的话,那么其实也是x到根
但是如果是3的话,那么就是y到根
那么我们就能看出来,其实就是x和y到根节点的最小下标
做法就是: 找到在第一个黑色节点确定的时候,dfs求出每个点到根节点的路径上的最小答案,添加黑色节点的时候, r e s = m i n ( r e s , a [ x ] ) res = min(res,a[x]) res=min(res,a[x]),查询的时候 l a s t = m i n ( a n s , a [ x ] ) last =min(ans,a[x]) last=min(ans,a[x])

F. Ants on a Circle
题意:在这里插入图片描述
结论: 对于两个球碰撞(不记损失),相当于每个球在继续沿着当前的运动轨迹盒速度前行,但是换球了
思路: 所以根据上述结论可以得知,我们只需要知道其中一个球的位置就可以进而推出其他球的位置了

F. Card Game
题意:在这里插入图片描述
思路:
先讲正常思路:tag网络流
有个很神奇的思路:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值