• CEOI2020做题记录


    D1T1 「CEOI2020」花式围栏

    简单题,直接按高度排序从大往小加

    写个并查集维护连续段来统计方案数

    区间合并就把左右端点在两边的,高度在当前高度内的答案加上即可

    code


    D1T3 「CEOI2020」星际迷航

    一道题做4天不愧是我

    首先考虑(D=1)怎么做

    首先容易发现每一个点不是必胜就是必败

    于是我们可以换根dp出每个点的胜负状态

    我们发现其实我们如果把宇宙(1)里的一个必胜点连到宇宙(0)里对宇宙(0)的胜负状态是不影响的

    如果连的是一个必败点那么就是把宇宙(0)里的一个点变成了必胜点

    我们再dp求出改变这个节点的胜负状态为必胜后,能使(1)号节点的状态变为必胜的节点的个数(cnt)

    那么答案就是(W*n*win_1+L*cnt)

    其中(W)表示原图中必胜点的个数,(L)表示必败点的个数,(win_1)表示(1)号点是否必胜

    如果你的所有dp都是(O(n))的话就做完了

    现在我们考虑(D>1)的情况

    我们发现(W)(L)变成了对于(t in [1,D])的宇宙间所有的连边方案,在宇宙(1)里的必胜点个数之和和必败点个数之和

    我们考虑dp求出这个东西

    我们求出钦定每一个点必胜,原图中必胜点的个数和(A),和原图中必败点的个数和(B)

    我们认为原图中必胜点个数是(W_1)

    于是我们不难发现

    (W_D=W_{D-1}*W_1*n+L_{D-1}*A)

    (L_D=W_{D-1}*L_1*n+L_{D-1}*B)

    其实就是考虑在最前面加一个宇宙,然后考虑连边是必胜点连过去还是必败点连过去

    我们发现这可以矩阵乘法优化

    所以就(O(n+logD))

    那么(A)(B)怎么算呢

    我的方法很暴躁,大家可以去看下Itst的方法非常简洁但是我没看懂

    简单介绍下我的nt做法

    (g[x][0/1])表示从x点的父亲节点出发,只向(x)的子树外走,状态为必胜/必败时,在(x)子树内的必胜点个数

    从下向上dp转移

    转移比较简单就不写了,如果大家有兴趣可以去看我的代码

    (h[x][0/1])表示从x点出发,只向(x)的子树内走,状态为必败/必胜时,在(x)子树外(含x)的必胜点个数

    从上到下dp,换根转移,讨论很麻烦,如果大家有兴趣可以去看我的代码

    那么对于钦定x点是必胜点的情况下,必胜点个数就是(g[x][1]+h[x][1]-1)

    那么就可以做了

    code


    D2T1 「CEOI2020」权力药水

    观察到卡空间,所以空间复杂度(O(nd))的简单做法不可行

    我们考虑一个类似于线段树分治的做法

    对于每一条边可以简单求出他作用的时间区间

    对于每一个点以时间为下标用动态开点线段树套vector存一下每一个时间的信息

    使用类似于标记永久化的技巧

    询问就在线段树上暴力把时间点对应的所有点拿下来即可

    然后排序双指针回答询问

    时间复杂度是(O(ulogu+qdlogd))

    在loj上空间卡过去了在洛谷上mle了

    code


    D2T2 「CEOI2020」春季大扫除

    首先加入叶子以后总叶子个数是奇数显然无解

    我们考虑把一个非叶子节点提成根

    对于不是根的节点,我们贪心地考虑,一个点子树内的叶子显然要尽量多配对

    对于所有儿子节点里的叶子,我们考虑两两配对

    但是这个点到父亲的边需要被覆盖

    那么如果这个点子树内有奇数个叶子,则只需要随意留一个叶子即可,否则需要留两个叶子

    把留下的叶子传到父亲节点去

    容易发现这样恰好可以配对,并且总答案最小

    接下来计算答案

    我们考虑如果一个点子树内有奇数个叶子,那么他到父亲节点的边会被覆盖一次,否则会被覆盖两次

    那么答案就是

    (n-1+sum_{i!=rt}[i的子树内有偶数个叶子])

    考虑每次怎么计算,容易发现只需要虚树上dp即可

    时间复杂度(O(nlogn))

    code


  • 相关阅读:
    经典算法之冒泡排序(Bubble Sort)-Python实现
    经典算法之快速排序(Quick Sort)-Python实现
    2020年SRE的随心感悟
    django: 像正常运行django的项目运行单个文件
    整理一下javascript中offsetWidth、clientWidth、width、scrollWidth、clientX、screenX、offsetX、pageX的具体含义
    requestAnimationFram 的优势及使用场景
    js 隐式数据转换带来的BUG
    为什么我不建议在js中使用链接变量分配
    关于JS函数传参的数据修改
    实现一个查看浏览器内核及版本号的功能函数
  • 原文地址:https://www.cnblogs.com/deaf/p/13628753.html
Copyright © 2020-2023  润新知