Loading

[总结]模拟赛2022/1/19

[总结]2022/1/19

P1心路历程

赛时

30min看完题目,一开始认为T1、T3、T4都是最小生成树。后来慢慢看题,发现都不是。

T1写了一个类似于Dij的算法。流程如下:

  1. 找一个对当前贡献最大的点(贡献最大指的是:能看都最多现在没有看到的点);
  2. 标记找到的点以及它可以看到的点(注意,两种标记是不一样的。第一种表示以后再也选不了;第二种表示以看到的点);
  3. ans++;
  4. 如果已经满足要求,输出ans。

大概30min写完。

看到T2第一感觉就是贪心,但想了大概10min考虑贪心是否是对的以及一些细节。后来写双向链表的时候写挂了,果断换题。主要是吸取了CSP的经验。

才发现T3和T4都不会,写了两个骗分程序,去改T2。

T2终于改出来了,一直呆到比赛结束。

赛后

OHOHOHOHOH!!!我T2AC了!!!但正确性我不会证啊???

T4的数据好水啊,全部加起来,都能拿25分。(有些对不起那些好好打树形dp只拿了12.5分的同学)。

T3可以用暴力+贪心???好水的数据。

P2比赛反思

  1. 下次可以压缩一下看题时间。最好在20min以内。
  2. 不要把一道题的idea照搬到其他题上,比如今天开题的时候认为3道是最小生成树。想题的时候尽量换一种心态想。
  3. 相信自己的感觉,其实T2没必要花10min思考对还是错,应该冲动一点。
  4. 多学习基础算法,比如今天T1差不多是模板的树形dp居然完全不会。

P3感想

  1. 数据太水了。
  2. 相信自己的想法,自信一点。
  3. 相信暴力可以AC或拿到较高的分数。

P4题目总结

T1

赛时做法:写了一个类似于Dij的鬼东西,具体做法如上。

赛后做法:其实就是树形dp的板。但是,由于有 \(n\) 条边,所以,我们需要删掉一条边。在寻找那条边的过程中,使用dfs,记录一个节点的父亲,然后判断:如果找到了一个点,重复了两次,且不是当前节点的父亲,则当前节点与找到的节点就是我们要删的边。把这两个点记作: \(r_1,r_2\)。如下图。

1

然后分别以 \(r_1,r_2\) 作为根,跑一边树形dp。设 \(f_{x,0},f_{x,1}\),分别表示:以 \(r_1\) 为根的情况下,\(x\) 节点不选与选的最小答案。设 \(g_{x,0},g_{x,1}\),分别表示:以 \(r_2\) 为根的情况下,\(x\) 节点不选与选的最小答案。转移方程如下:

\[\begin{cases} f_{x,0}=\sum f_{son_{x,i},1} \\ f_{x,1}=\sum\min\{f_{son_{x,i},1},f_{son_{x,i},0}\} \\ g_{x,0}=\sum g_{son_{x,i},1} \\ g_{x,1}=\sum \min\{g_{son_{x,i},1},g_{son_{x,i},0}\} \end{cases} \]

初始化:f[i][0]=g[i][0]=1

\(f\) 为例,解释一下:由于题目的特殊性,如果父亲不选则儿子一定都要选;但如果父亲选的话,儿子可选可不选,所以就从这两者选个最小值。

T2

贪心+双向链表,但是不会正确性的证明;区间dp比较严谨而且较好理解。

下面给出一点不算好的贪心证明。

2

以上图为例,先给给它从小到大排个序,然后排完序的顺序就是枚举的顺序。假如1是x,5是y,3是z。那么想要找到比\(\lvert y-x \rvert,\lvert z-x\rvert\) 更优的方案,则必须有一个节点,要干掉 \(y,z\) 的其中一个。通过题目可知,如果有其他点要干点 \(y,z\) ,则这个点比 \(y,z\) 还要大,那么方案会更差。所以,可以用贪心。

区间dp的做法是:将数组复制一遍,然后设 \(f_{l,r}\) 为l到r的最小答案。那么转移方程显而易见:f[l][r]=min(f[l][r],f[l][k+1]+f[k+1][r]+abs(max(i,k)-max(k+1,r))

T3

水过,但要打网络流,设一个超级源点s和超级汇点t,将价值为1的全部点连向s,价值为-1的连向t,这两种边流量都是1。原图中所有边流量为inf。然后就是最大流模板了。

T4 Emma不会。

posted @ 2022-01-19 19:14  小铭同学lym  阅读(40)  评论(0编辑  收藏  举报