其他分享
首页 > 其他分享> > CF乱做

CF乱做

作者:互联网

以前开的坑

cf上刷点题,代码用链接方式给出

10D

感觉早期的题评分都有点高,大概就是设\(dp_{i,j}\)为到\(a\)第\(i\)个位置和到\(b\)第\(j\)个位置的答案,满足\(a_i=b_j\),然后设\(f_k\)为\(b\)在\(k\)这个位置的最优答案,那么有以下的\(dp\)

\(dp_{i,j}=\max_{k=1}^{j-1}(dp_{i,j},f_k+1)\)

\(f_j=dp_{i,j}\)

因为不管哪个数组都是满足越往后越优的

\(code\):http://codeforces.com/problemset/submission/10/117055277

555E

考虑如果两个点在一个边双之中,那么这两个点一定是相互可达的,只要让每个简单环都按照一个方向定向即可

把所有边双缩为一个点之后就是一棵树,下文所说的点都是缩完点后所在的点。考虑记录对于每个询问,把起始点到lca的路径上的边全都标记成向上,把lca到终点的路径上的边全都标记成向下,这个可以用树上差分来做,最后只要每个点都满足up和down有一个值是0即可

\(code\):http://codeforces.com/contest/555/submission/117063785

613D

虚树模板。在学校已经琢磨出了虚树的影子,但没yy出虚树的建法,后来yy了一个特别难写的做法。回来看了眼题解学习了虚树。

特判-1的情况,就是有两个点直接连通

先把虚树建出来,定义\(res_u\)为这个点的子树内可以到达上面的点的数量,然后分情况讨论

如果是重要点,那么连接的每棵子树内要么没有可以上来的点,如果有就要断一个点,\(ans+1\),没有就不管,因为自己这个点肯定可以上去,所以\(res_u=1\)

如果不是重要点,考虑子树内可以上来的点的总数,如果没有直接\(res_u=0\),如果只有一个那么这个点肯定可以上去也没必要在这个点断掉,上去断对于这个点来说是等价的,但是在上面断或许可以顺便帮助别的点,所以\(res_u=1\),如果有超过1个点,那么这个些点在这必须断掉,\(ans+1,res_u=0\)

\(code\):https://codeforces.com/contest/613/submission/117179185

19D

咕咕咕咕咕咕咕咕咕咕想写的时候写咕咕咕咕咕咕咕

1375G

ovo做的太复杂了但是思路是一样的,首先我们分析一下如果我们定下了一个点作为最终的根,那么答案应该是多少?首先我们可以把距离它为2的点全都做一下操作,然后再选距离为2的点,也就是说把子树内所有奇数层的点全都操作一下。为什么不能是偶数?因为每次操作都会使每一个位置的层数-2,所以奇数点最后还是要做一下操作,这就没有只用奇数点要优秀了。所以换根dp,考虑子树内的奇数层的点和树外面的,这个很好统计。

事实上就是黑白染色,答案就是白色和黑色中染的点的数量最少的那个颜色的答案,我做麻烦了QWQ

\(code\):https://codeforces.com/contest/1375/submission/117407189

标签:code,submission,咕咕,res,CF,codeforces,dp
来源: https://www.cnblogs.com/Pbriqwq/p/15039309.html