BZOJ.4160.[NEERC2009]Exclusive Access 2(状压DP Dilworth定理)
DAG中,根据\(Dilworth\)定理,有 \(最长反链=最小链覆盖\),也有 \(最长链=最小反链划分数-1\)(这个是指最短的最长链?并不是很确定=-=),即把所有点划分成最少的集合,使得集合内的点两两之间没有边。
直接状压。设\(f[s]\)表示\(s\)集合内的点是否满足两两之间没有边,\(g[s]\)表示最少可以将\(s\)划分为几个集合使得集合内两两没有边。
那么如果\(f[s']=1\ (s'\in s)\),\(g[s]=\min(g[s],\ g[s\ \text{xor}\ s']+1)\)。
复杂度\(O(m2^n+3^n)\)。
这么做不需要考虑给边定向啊= =
另一个这样应用\(Dilworth\)定理的好像是导弹拦截问题?
所以这题猜个结论之后,不和BZOJ4145一样吗=v=
//1112kb 728ms
#include <cstdio>
#include <cstring>
#include <algorithm>
#define lb(x) (x&-x)
const int N=15,M=(1<<N)+1;
int g[M],id[233],ref[M];
bool mp[N][N],f[M];
int main()
{
char s1[3],s2[3];
memset(id,0xff,sizeof id);
int n=0,m; scanf("%d",&m);
for(int p1,p2; m--; )
{
scanf("%s%s",s1,s2);
if(id[p1=s1[0]]==-1) id[p1]=n++;
if(id[p2=s2[0]]==-1) id[p2]=n++;
mp[id[p1]][id[p2]]=1, mp[id[p2]][id[p1]]=1;
}
int lim=(1<<n)-1;
for(int i=0; i<n; ++i) ref[1<<i]=i;
for(int s=0; s<=lim; ++s)
{
f[s]=1;
for(int s1=s; s1&&f[s]; s1^=lb(s1))
for(int s2=s,i=ref[lb(s1)]; s2; s2^=lb(s2))
if(mp[i][ref[lb(s2)]]) {f[s]=0; break;}
}
g[0]=0;
for(int s=1; s<=lim; ++s)
{
int tmp=1<<30;
for(int ss=s; ss; ss=(ss-1)&s)
if(f[ss]) tmp=std::min(tmp,g[s^ss]+1);
g[s]=tmp;
}
printf("%d\n",g[lim]-2);
return 0;
}
BZOJ.4160.[NEERC2009]Exclusive Access 2(状压DP Dilworth定理)的更多相关文章
- [BZOJ 1072] [SCOI2007] 排列perm 【状压DP】
题目链接:BZOJ 1072 这道题使用 C++ STL 的 next_permutation() 函数直接暴力就可以AC .(使用 Set 判断是否重复) 代码如下: #include <io ...
- BZOJ 3195 [Jxoi2012]奇怪的道路 | 状压DP
传送门 BZOJ 3195 题解 这是一道画风正常的状压DP题. 可以想到,\(dp[i][j][k]\)表示到第\(i\)个点.已经连了\(j\)条边,当前\([i - K, i]\)区间内的点的度 ...
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- BZOJ 3446: [Usaco2014 Feb]Cow Decathlon( 状压dp )
水状压dp. dp(x, s) = max{ dp( x - 1, s - {h} ) } + 奖励(假如拿到的) (h∈s). 时间复杂度O(n * 2^n) ------------------- ...
- BZOJ 2734 [HNOI2012]集合选数 (状压DP、时间复杂度分析)
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2734 题解 嗯早就想写的题,昨天因为某些不可告人的原因(大雾)把这题写了,今天再来写题解 ...
- BZOJ 4197 NOI 2015 寿司晚宴 状压DP
4197: [Noi2015]寿司晚宴 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 694 Solved: 440[Submit][Status] ...
- BZOJ 1879 [Sdoi2009]Bill的挑战 ——状压DP
本来打算好好写写SDOI的DP题目,但是忒难了, 太难了,就写的这三道题仿佛是可做的. 生在弱省真是兴奋. 这题目直接状压,f[i][j]表示匹配到i,状态集合为j的方案数,然后递推即可. #incl ...
- bzoj 4197: [Noi2015]寿司晚宴【状压dp】
一个数内可能多个的质因数只有小于根号n的,500内这样的数只有8个,所以考虑状压 把2~n的数处理出小于根号500的质因数集压成s,以及大质数p(没有就是1),然后按p排序 根据题目要求,拥有一个质因 ...
- bzoj 1072: [SCOI2007]排列perm【状压dp】
先写了个next_permutation结果T了,于是开始写状压 设f[s][i]为选取状态为s,选的数模d为i的方案数,去重的话直接除以每个数字的出现次数的阶乘即可 #include<iost ...
随机推荐
- SQL Server 游标的使用示例
Ø 简介 本文主要记录 MSSQL 中的游标使用示例,在有必要时方便借鉴查阅.游标一般定义在某段功能性的 SQL 语句中,或者存储过程中.之所以选择用它,是因为有时候无法使用简单的 SQL 语句满足 ...
- LNMP组合环境
Mysql----二进制安装: 下载rpm包 创建MySQL用户: useradd -s /sbin/nologin mysql -M 这里遇到无法创建用户,提示:useradd: group mys ...
- 【AGC 005F】Many Easy Problems
Description One day, Takahashi was given the following problem from Aoki: You are given a tree with ...
- Java(16)接口
一.接口:特殊的抽象类 1.1 语法 public interface 接口名 extends 接口1,接口2{ //1.常量 //2.抽象方法 } 1.2 特点 a.用interface修饰 b.接 ...
- docker搭建及使用:centos7.0+docker+flask+nginx
flask笔记: centos7安装Docker: yum install docker 启动docker服务: service docker start 构建基本镜像: sudo docker pu ...
- spring boot启动项的问题
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot ...
- 【转】web.xml中的contextConfigLocation在spring中的作用
一.spring中如何使用多个xml配置文件 1.在web.xml中定义contextConfigLocation参数,Spring会使用这个参数去加载所有逗号分隔的xml文件,如果没有这个参数,sp ...
- [Linux]fcntl函数文件锁概述
概述 fcntl函数文件锁有几个比较容易忽视的地方: 1.文件锁是真的进程之间而言的,调用进程绝对不会被自己创建的锁锁住,因为F_SETLK和F_SETLKW命令总是替换调用进程现有的锁(若已存在), ...
- Freemarker网页静态化
Freemarker的jar包 创建整合spring的配置文件 <?xml version="1.0" encoding="UTF-8"?> < ...
- [原创]..\OBJ\gpio.axf: error: L6002U: Could not open file ..\obj\gpio.o: No such file
可以通过: 可以通过修改用户环境变量路径的方法解决:方法:右键我的电脑\属性\高级系统设置\环境变量\用户环境变量,找到变量TEMP和TMP,将变量值中的“%USERPROFILE%”使用“C:\us ...