模拟85 题解

A. 表达式密码

观察样例,发现答案就是将减法拆为一个减法和多个加法,于是就完了。

 

 

 

B. 电压机制

发现问题是认为一条边相邻的两个点颜色相同并不考虑这条边,问图能否二分图染色。

暴力做法是$O(nm)$的。

仔细想想就可以发现:

对于奇环,不能二分图染色,所以必须选择奇环上的边。

对于偶环,可以二分图染色,但如果选择了偶环上的边必死。

所以问题是有多少边被所有奇环包含并不被偶环包含。

部分分提示可以生成一棵树,并考虑所有的非树边形成的环。

非树边与树边形成环的贡献是比较好考虑的,树剖/树上差分等一些方法都可以维护。

然而非树边和非树边也可能形成环。

所以大力分类讨论,

1.两个非树边分别与树边形成奇环,那么两个非树边形成偶环。

因为两个奇环保证了只有重叠部分才有贡献,不考虑这个偶环是正确的。

2.两个非树边分别与树边形成偶环,那么两个非树边形成偶环。

两个偶环已经保证了所有树边都死了,不考虑这个偶环是正确的。

3.两个非树边分别与树边形成奇环和偶环,那么两个非树边形成奇环。

(1).奇环在上偶环在下,只有形成奇环的非树边可能会活,至于这个贡献留到下面。

(2).偶环在上奇环在下,偶环必死,原奇环仍然被现在形成的奇环包含。

 

可以得出结论是:非树边与非树边形成的环,如果不去考虑,对答案没有影响。

所以一遍$dfs$,保证每一条非树边都是返祖边,将会非常好做。

非树边对答案也可能产生贡献,但产生大小为1的贡献仅当非树边只与树边形成一个奇环。

因为一旦产生两个奇环,每一条非树边都不可能被覆盖两次。

 

 

 

C. 括号密码

对于区间不相交的情况:

当每个括号对整体造成$2$的贡献的时候,这个括号交换是不会亏的。

对于每一个区间,处理出左侧应该加入的左括号个数,右侧应该加入的右括号个数。

首先尝试自行交换解决。

解决不了的部分尽量与其它区间交换解决。这个交换可以用一个变量维护。

 

如果区间存在相交但不存在覆盖:

由一些前缀和关系,中间的交集必是平衡的。所以可以拆分为三个区间。

如果区间存在覆盖:

中间的一个区间是平衡的,大区间减去小区间的部分是平衡的。

总体来说,将每个覆盖区间集合相同的点视作一个序列。分别统计每个序列的答案就可以了。

你可能感兴趣的:(模拟85 题解)