JOISC 2014 简要题解
代码,题目推荐在 LOJ 上看。
#2872. 「JOISC 2014 Day1」巴士走读
大常数做法。
假设我们知道了终止的时间,那么就显然可以最短路直接求出最晚要什么时候到达 \(n\) 号点,复杂度为 \(\mathcal O(n\log m)\) ,然后可以二分终止的时间,复杂度为 \(\mathcal O(n \log m\log V)\)。
但是有多组询问,因此直接整体二分就行了,复杂度应该是 \(\mathcal O(n \log m\log V)\) 。
#2873. 「JOISC 2014 Day1」有趣的家庭菜园
题目就是想说明要求 IOI 草是一个单峰的形状。
因此我们可以按照 \(H_i\) 从高到低加入 IOI 草,然后每次可以放左边或者右边,这两种的贡献形式都是逆序对个数,直接树状数组维护,然后注意一下相同 \(H_i\) 的 IOI 草同时处理,不能让他们互相影响就行了(因为一定是左边一部分选择放左边,其他部分放右边,然后互相之间不会有逆序对)。
#2874. 「JOISC 2014 Day1」历史研究
回滚莫队板子,不解释。
#2875. 「JOISC 2014 Day1」拉面比较
先两两分组,每组比较分出最大值和最小值,共\(\left\lfloor \frac{n}{2}\right\rfloor\) 次,然后把两组的最大值和最小值分别比较,共 \(2 (\left\lceil \frac{n}{2}\right\rceil - 1)\) 次。
今年我初赛题比较次数就是因为这个对的
#2876. 「JOISC 2014 Day2」水壶
写个广搜搜一搜,同时用并查集建出一个建筑物之间的生成树(就是两个节点交界处时计算边权),然后直接建出来 Kruskal 重构树,询问的时候找一下 LCA 就行了。
#2877. 「JOISC 2014 Day2」交朋友
定义 \(to_x\) 代表 \(x\) 出边的集合。
显然,对于每个 \(x\), \(to_x\) 中的城市两两是友好国家。
然后我们发现,如果 \((x, y)\) 是友好国家,那么 \(\forall z \in to_y, (x, z)\) 也是友好国家,因此最后再次用并查集合并一下就行了。
#2878. 「JOISC 2014 Day2」邮戳拉力赛
之前写了一个贪心 + DP ,然后萎了成 80 pts,找了半天错,最后发现是思路不对。
注意到走的方法可以很鬼畜,七拐八拐的,但是总有一个不变:
在某个点转向成下行列车,必定有一个地方转向成上行列车走回来。
然后我们可以将转向成下行列车作为 )
,转向成上行列车作为 (
,那么所有的方案一定是一个括号序列。
因此,考虑 记 f[i][j]
代表 目前考虑到 \(i\) 点,有 \(j\) 个 (
,的最小代价, 考虑 \(i\) 要放几个(
或者)
, 而贡献可以通过费用提前计算很好地计算出来。
#2879. 「JOISC 2014 Day3」JOIOJI
首先,我们对于 3 种字母分别进行前缀和统计个数,我们发现对于满足条件的子串 \((l, r)\),那么 \(l - 1\) ,\(r\) 的前缀和数组的差分数组一定相同,那么就可以直接对前缀和数组差分后进行 hash,用 map 统计答案即可。
#2880. 「JOISC 2014 Day3」稻草人
不解释。
#2881. 「JOISC 2014 Day3」电压
原问题等价于问有多少边满足删了该边使得整个图为二分图且 删边可以使得图不连通或者不删会成为非二分图 。
首先建出 dfs 生成树,然后通过差分可以求出每条边有多少个奇环和偶环经过,于是有两种情况:
- 删掉非 dfs 生成树边,只有当奇环个数为 \(1\) 的时候,可以删去该边
- 删掉 dfs 生成树边,当所有奇环经过该边并且没有偶环经过该边的时候可行。
简单讨论即可。
#2882. 「JOISC 2014 Day4」两个人的星座
计算几何,还不太会,正在咕咕咕咕咕。
#2884. 「JOISC 2014 Day4」挂饰
我们注意到,当 \(a_i = 0\) 的时候,相当于将可用的挂钩数 \(-1\), 其他的都是增加或者不变。
那么将 \(a_i = 0\) 的单独考虑,其他的先跑一个背包,设 \(f_i\) 表示当期可用挂钩剩余量为 \(i\) 的最大喜悦值,最后再贪心匹配 \(a_i = 0\) 的挂饰就行了,复杂度 \(\mathcal O(n ^ 2)\)。