业余ACMer笔记·五月第二周补题(2-SAT,换根dp)

五月第一周在肝算法课设,又被抓去学pytorch,所以第一周没做题~~。有空把pytorch的学习成果整理整理。

CF923C 【Perfect Security】

原题地址

代码:
题目大意见参考博客
注意要正向填充~~(因为我逆向填充总是把自己弄晕)~~
题目不难,但字典树比较难想到

CF1187E Tree Painting

原题地址

代码:
题目大意:给一棵树,起初每个顶点都是白色,第一轮你可以随意选择一个顶点染成黑色,以后每轮你可以选择已经染成黑色的顶点的相邻白色顶点染色,每轮得到的分数=从当前白色顶点出发,只经过白色顶点可以遍历到的白色顶点数(包括自己)(也就是所选白结点所在白色连通块的大小),求最大总价值

参考博客
图片来自参考博客
图片来自参考博客
这里的size[x],我理解为将x-y这条边切开后以x为根的树的size,与代码中的size含义略有不同。f[son1]代表以son1为子树的max得分。
感觉如果那么理解的话
ans[y]=f[xson1]+f[xson2]+f[xson3]+2size[x]+size[y]+f[yson1]+f[yson2]+f[yson3]
ans[x]=f[xson1]+f[xson2]+f[xson3]+size[x]+2
size[y]+f[yson1]+f[yson2]+f[yson3]

2-SAT

之前看到过这个算法,但最近做到了2-SAT的题,才发现相关题目水可以很深。
2-SAT的基本思想是,如果有矛盾,则有两条边不得不连,将这些边连起来。构成的强联通块中如果有A和\A在同一强联通块中,则不存在可行解。如果需要输出可行解,则反向tpsort。
但感觉如何建边其实没那么好想(算法竞赛从入门到进阶P238)

POJ 3648

参考博客

代码:
2-SAT只要求有奸情的人不都坐在新娘的对面,但可以都坐在新郎的对面
比较讨厌的是新郎也有可能有奸情(哇哦~),所以新郎也要考虑,所以还要从新娘向新郎连一条边。然而,用2-SAT的建边思想,貌似解释不出来这条边的依据。

CF875C National Property

原题地址

代码:
题目大意:给定一些字符串,其中字母用数字表示,并且初始是小写的。你可以把一些小写字母改成大写,但同时你要把所有同种字母全部改成大写。问是否能经过一些操作使得最终的字符串序列满足按字典序升序排列。如果能,则需要输出方案。

首先要能想到是2-SAT问题。
然鹅,感觉直接套板子的话建边思路很奇怪。
参考博客

在这里插入图片描述
没看懂u>v时的建边思想。
好似我可以看作u与v,\u与\v,\u与\v有矛盾,具体有时间敲一下试试。
参考博客个人比较欣赏的一种解法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值