题意:给定连通图,求出连通图的所有子图的颜色数。 一个图的颜色数,指最少的颜色数,给图染色,使得有边相邻的点之间颜色不同。

思路:首先想法是DFS枚举,然后计算颜色,发现对于给定图,求颜色不会求? 毕竟是很乱的无向图。

那么考虑DP:dp[s]=min(dp[s0]+1),s0是s的子集,且满足s^s0是独立集。 那么复杂度是O(3^N);

因为有补集,还可以用反演DP???我第一次遇到。好菜啊,有机会补一下。

#include<bits/stdc++.h>
#define uint unsigned int
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
char c[][]; bool vis[maxn];
int q[maxn],tot,N; uint dp[maxn];
void check(int S)
{
rep(i,,S) vis[i]=,dp[i]=;
dp[]=;
rep(i,,S) {
tot=; bool F=;
rep(j,,N-) if(i&(<<j)) q[++tot]=j;
rep(j,,tot){
if(!F) break;
rep(k,,tot)
if(c[q[j]][q[k]]=='') {
F=; break;
}
}
if(F) vis[i]=;
}
}
int main()
{
int T,S;
scanf("%d",&T);
while(T--){
scanf("%d",&N); S=(<<N)-;
rep(i,,N-) scanf("%s",c[i]);
check(S);
for(int s=;s<=S;s++){
for(int i=s;;i=(i-)&s){
if(vis[i^s]){
dp[s]=min(dp[s],dp[i]+);
}
if(i==) break;
}
}
uint t=,ans=;
for(int i=;i<=S;i++){
t=t*;
ans+=t*dp[i];
}
cout<<ans<<endl;
}
return ;
}

HDU - 5823:color II (状压DP 反演DP)的更多相关文章

  1. hdu 5823 color II 状压dp

    题目链接 给n个点 n<=18. 然后给出它们两两之间是否有边相连. 问你这个图的所有子集,最少要用多少种颜色来染色, 如果两个点相连, 那么这两个点不能染同样的颜色. 先预处理出所有的点独立集 ...

  2. hdu 5823 color II——子集dp(独立集)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5823 独立集染一种颜色.在这个基础上枚举子集来dp. 状压一样地存边真是美妙. 2^32是1ll<& ...

  3. HDU 4336-Card Collector(状压,概率dp)

    题意: 有n种卡片,每包面里面,可能有一张卡片或没有,已知每种卡片在面里出现的概率,求获得n种卡片,需要吃面的包数的期望 分析: n很小,用状压,以前做状压时做过这道题,但概率怎么推的不清楚,现在看来 ...

  4. HDU 5823 color II

    dp[i]表示i子图的最小染色数目. dp[i]=min( dp[i], dp[j]+1 ), j是i的子集,并且j图内的点没有边相连. 高效率枚举i子集的方法:for(int j=i;j;j=(j- ...

  5. hdu 5823 color II —— 子集DP

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5823 看博客:http://www.cnblogs.com/SilverNebula/p/5929550. ...

  6. HDU 5823 color II(FWT)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5823 [题目大意] 定义一张无向图的价值:给每个节点染色使得每条边连接的两个节点颜色不相同的最少颜 ...

  7. hdu 3247 AC自动+状压dp+bfs处理

    Resource Archiver Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 100000/100000 K (Java/Ot ...

  8. hdu 2825 aC自动机+状压dp

    Wireless Password Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  9. 关灯问题II 状压DP

    关灯问题II 状压DP \(n\)个灯,\(m\)个按钮,每个按钮都会对每个灯有不同影响,问最少多少次使灯熄完. \(n\le 10,m\le 100\) 状压DP的好题,体现了状压的基本套路与二进制 ...

随机推荐

  1. PHP防止被重复请求接口的方法(网页端签名验证的方法)

    PHP防止被重复请求接口的方法(网页端签名验证的方法) 可以采取签名验证的方式来 解决这个问题 1 time和随机数都是PHP生成的显示在前端 2 前端生成sign 3 进行每次请求的sign计数 这 ...

  2. python3.5+tornado学习

    python3.5的安装 python官网下载地址:https://www.python.org/ 自行下载最新版本 下载pip包或者easy_install 后缀为.gz格式 地址:https:// ...

  3. 解决非controller使用@Autowired注解注入为null问题

    在SpringMVC框架中,我们经常要使用@Autowired注解注入Service或者Mapper接口,我们也知道,在controller层中注入service接口,在service层中注入其它的s ...

  4. vs2017- C语言- winsocket- 链接错误 LNK2019

    错误介绍 操作系统:windows10 IDE:vs2017 语言:C语言 项目内容简介:编写一个双人网络海战棋对战游戏 错误类型:链接错误 LNK2019 解决方案:程序需要用到ws2_32.lib ...

  5. 一文快速入门Docker

    Docker提供一种安全.可重复的环境中自动部署软件的方式,拉开了基于与计算平台发展方式的变革序幕.如今Docker在互联网公司使用已经非常普遍.本文用十分钟时间,带你快速入门Docker. Dock ...

  6. java之spring mvc之页面跳转

    1. 如果返回值为ModelAndView,在处理方法中,返回null时,默认跳转的视图名称为请求名.跳转结果会根据视图解析器来跳转. @RequestMapping("/hello.do& ...

  7. 【C#】 获取计算机的硬件信息

    添加引用:System.Management /// <summary> /// 获取本机的MAC地址 /// </summary> /// <returns>&l ...

  8. 自己使用的jquery公用common.js

    /*解决ie8中js数组没有indexOf方法*/ jQuery.extend({ exportResport : function(url, method, params){ var paramCo ...

  9. oracle plsql基本语法

    oracle plsql 基本语法 --plsql默认规则:plsql赋值用":=" plsql判断用"=" plsql输入用"&" ...

  10. python爬虫-有道翻译-js加密破解

    有道翻译-js加密破解 这是本地爬取的网址:http://fanyi.youdao.com/ 一.分析请求 我们在页面中输入:水果,翻译后的英文就是:fruit.请求携带的参数有很多,先将参数数据保存 ...