赛前冲刺日志

离 noip2020 一个多月的一点学习记录。

2020.10.28

今天的题前四道是二分图和网络流相关的,主要使用了 xht37 的板子,做的也还可以,难点在于二分图的建立和一些细节处理。后四道题是 LCA 和树上差分相关的题目,主要复习了倍增 LCA 的求法以及点差分转边差分,难点在于模型的转化和一些细节处理。 可见,图论的题最难的是建图,在实际使用中可以把最大流当做一个黑盒代码使用。

注意

  1. 最大流中两个 $n$ 的含义是不一样的,一个可能是行数而不是真正的点数
  2. 二分图中如果沿用 $n$ 应当注意,$n$ 是所有点的数量并非一个集合中点的数量
  3. 二分图中如果采用 Dinic,最后求和的时候一定要记得循环从 for (int i = 1; i <= n; i++) hi[i] = head[i]; 改为 for (int i = 0; i < T; i++) hi[i] = head[i];
  4. 倍增求 LCA 时,应该将较大的开在第一维如 f[N][25]
  5. 倍增求 LCA 时,判断条件中 if (dep[f[x][i]] >= dep[y]) 一定不要忘记是大于等于
  6. 无向图建图应当开双向边
  7. 网络流最初从 $1$ 开始建边

2020.10.29

今天的题目与树链剖分有关,主要参考了 oi wiki。为什么今天只有两道题呢?……因为树剖太难调了
树剖的常数很小,比倍增小很多。而且很适合用来统计树上问题,当然,要注意的地方也不少。

注意

  1. 我们需要维护每个结点的父亲、深度、子树大小、重儿子、重链的头、节点的 dfs 序、dfs 对应的节点编号等
  2. 第二遍 dfs 的时候一定要记得两个参数都是 v
  3. 线段树查询的时候一定要用 ql, qr 作为参数,便于调试
  4. 可以考虑精简线段树,不需要用到的可以不写
  5. 线段树空间要开到四倍
  6. 初始的时候 dep[1] = 1
  7. 求 LCA 时,一定是 if (dep[top[u]] > dep[top[v]]) 而不是 if (dep[u] > dep[v]) </span>

2020.10.30

一道题还没做完(

这个题本来自信能 20pts,结果 15 pts,调了一会找不到错误,于是看了看数据发现查询的起点和终点是一个点……

在网上找不到想要的暴力做法,明天可能会自己写一个 60pts 的

注意

  1. 查询起点和终点的是同一个点要记得特判
  2. calc 中是 rnk[v] = i; 不是 rnk[u] = i;

打了 Codeforces Round #675 (Div. 2)

  1. Fence
  2. Nice Matrix
  3. Bargain
  4. Returning Home
  5. Minlexes

2020.10.31

可以看到,除了三道题是来自原来的任务列表以外,做了四道模板题,按照熟练程度由大到小排序。

注意

线段树

  1. 空间要开四倍
  2. 下推标记时先加法后乘法

ST表

  1. 考虑线性求 log
    1
    2
    3
    4
    5
    6
    void pre() {
    Logn[1] = 0,Logn[2] = 1;
    for (int i = 3; i < maxn; i++) {
    Logn[i] = Logn[i / 2] + 1;
    }
    }

AC自动机

  1. 应当考虑写个函数 rnk 用来求 str[i] - 'a' ,避免 iidx 两个变量混用

2020.11.1

2020.11.2~11.4

sb文化课+月考(

2020.11.5

文章作者: answerend42
文章链接: http://answerend42.github.io/2020/10/28/%E8%B5%9B%E5%89%8D%E5%86%B2%E5%88%BA%E6%97%A5%E5%BF%97/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 answerend42的Blog