博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces571C. CNF 2
阅读量:4967 次
发布时间:2019-06-12

本文共 1142 字,大约阅读时间需要 3 分钟。

传送门:

思路:

先去掉只出现一次的变量,贪心地使出现的表达式为真
再去掉出现两次的且要求取值相同的变量,贪心地使两个表达式为真 
现在只剩下出现两次且要求取值不同的变量
把变量当作边,连接有它的两个表达式 
现在就是要给该图的边定向,使每个点都有入边(即每个表达式成立) 
构造,找到一个环,构造基环外向树即可 

另一种写法是用二分图匹配,思路要清晰好想一些,但是代码长一点,先留个坑

还是去掉只出现一次的变量和出现两次的且要求取值相同的变量

变量是二分图的一边,表达式是二分图的另一边,给变量向有它的两个表达式连边,因为只能使一个成立,所以就是求二分图最大匹配,数据范围较大,要用HK算法(然而还不会...)

/*先去掉只出现一次的变量,贪心地使出现的表达式为真再去掉出现两次的且要求取值相同的变量,贪心地使两个表达式为真 现在只剩下出现两次且要求取值不同的变量把变量当作边,连接有它的两个表达式 现在就是要给该图的边定向,使每个点都有入边(即每个表达式成立) 构造,找到一个环,构造基环外向树即可 */#include
#include
#include
#include
#define PI pair
#define mp(a,b) make_pair(a,b)#define fi first#define se second#define pb(a) push_back(a)#define abs(a) ((a)>0?(a):-(a))const int maxn=200010;using namespace std;int col[maxn],n,m,rely[maxn];bool flag[maxn],bo[maxn];vector
a[maxn],f[maxn];//n表达式,m变量,flag[i]表达式i是否已成立,bo[i]表示变量i(建图后的边)是否已用过 //rely[i]构造的基环外向树中哪条边指向该点(构造哪个变量使这个表达式成立,于是就可以求出变量的值) //a.fi变量的表达式,a.se使该表达式成立的取值 //f[i][j].fi i的第j条边连向的点,l[i][j].se i的第j条边对应的变量 bool dfs(int x){ flag[x]=1;//走到一个点就使与之相邻的一条边指向它,使之成立 for (int i=0;i

转载于:https://www.cnblogs.com/thythy/p/5493516.html

你可能感兴趣的文章
SpringBoot在idea中的热部署配置
查看>>
MyEclipse连接SQL Server 2008数据库的操作方法
查看>>
SqlCel 和MySQL for Excel在批量处理数据上的优劣
查看>>
leetcode【67】-Bulb Switcher
查看>>
JS验证图片格式和大小并预览
查看>>
调节心态的十种做法
查看>>
laravel5.2 移植到新服务器上除了“/”路由 ,其它路由对应的页面显示报404错误(Object not found!)———新装的LAMP没有加载Rewrite模块...
查看>>
潜罪犯
查看>>
编写高质量代码--改善python程序的建议(六)
查看>>
windows xp 中的administrator帐户不在用户登录内怎么解决?
查看>>
[spfa] Jzoj P4722 跳楼机
查看>>
代码审计入门后审计技巧
查看>>
Linux-Rsync服务器/客户端搭建实战
查看>>
接口和抽象类有什么区别
查看>>
简单通过百度api自动获取定位-前端实现
查看>>
180117 我的宠物识别判断语句
查看>>
JavaScript修炼之道pdf
查看>>
自己动手构造编译系统++编译、汇编与链接pdf
查看>>
JAVA 中文件读写函数BufferedReader 和 BufferedWriter 的使用
查看>>
Codeforces Round #206 (Div. 2)
查看>>