Unleafy · blog

July 3rd-暑期记录

467 words2 min readPageviews --#二分图#网络流#圆方树

July 3rd-暑期记录

中考查分, 698

P2065 [TJOI2011] 卡片

题目链接

第一眼看过去以为是二分图最大匹配的板子题, 交了两发 70pts, 才发现数据保证的不是 n,m500\sum n, m \le 500, 而是 n,m500n, m \le 500, 所以要考虑优化.

发现原图最坏的情况是有 mnmn 条边的, 考虑如何优化掉边的数量. 又联想到如果 a=piαi,b=piβia = \prod p_i^{\alpha_i}, b = \prod p_i^{\beta_i}, 那么 gcd(a,b)=pimin(αi,βi)\gcd(a, b) = \prod p_i^{\min(\alpha_i, \beta_i)}, 而且 pi>1p_i > 1, 所以我们可以对原来的数据进行质因数分解, 然后分别将他们和 pip_i 连容量为 11 的边, 再建立源点和汇点, 向他们连容量为 11 的边, 然后跑最大流就可以了.

code

P10932 Freda的传呼机

题目链接

P5236 双倍经验. 还是简单说一下思路. 发现 CC 的限制条件最强, 且按照 CC 的限制来看, 这张图就是一张仙人掌图. 我们对这张仙人掌图建立圆方树, 然后两点间的距离就映射到了圆方树上的树的距离. 如果 LCA(u,v)\operatorname{LCA}(u, v) 是圆点, 那么答案就是 distu+distv2×distLCA(u,v)dist_u + dist_v - 2 \times dist_{\operatorname{LCA}(u, v)}, 但是如果 LCA(u,v)\operatorname{LCA}(u, v) 是方点的话, 需要单独考虑. 设 uuLCA(u,v)\operatorname{LCA}(u, v) 的路径上经过的最后一个圆点是 uu', vv 同理设为 vv', 那么答案就是 distudistu+distv+distvdist_u - dist_{u'} + dist_v + dist_{v'} 再加上 uu'vv' 在环上的距离. 在建立圆方树的时候记录一下环上的信息, 做一遍前缀和, 输出的时候就可以直接统计了.

code1 code2 虽然是一样的((

Comments

Quiet notes for this article.