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

思路:首先想法是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. 【Codeforces627E】Orchestra(双指针_链表)

    题目 Codeforces627E 翻译 好久没做英语阅读了,来爽一爽吧 ~ 描述 保罗是管弦乐队的成员.弦乐组安排在一个 \(r\times c\) 的矩形方格区域中,其中有 \(n\) 个中提琴手 ...

  2. 手写MVC框架(一)-再出发

    背景 前段时间把之前写的DAO框架(手写DAO框架(一)-从“1”开始)整理了一下,重构了一版.整理过程中看以前写的代码,只是为了了解实现,只是为了实现,代码写的有点粗糙.既然已经整理了DAO框架,索 ...

  3. 玩转 SpringBoot 2 快速整合 Filter

    概述 SpringBoot 中没有 web.xml, 我们无法按照原来的方式在 web.xml 中配置 Filter .但是我们可以通过 JavaConfig(@Configuration +@Bea ...

  4. C/C++ 每日一题

    超长正整数的相加,题目链接:https://www.nowcoder.com/practice/5821836e0ec140c1aa29510fd05f45fc?tpId #include<al ...

  5. scala学习遇到的坑

    1:软件是idea,在同一个包中,类名一样,会导致在调用类的时候,程序无法找到正确的类,最后出错. 2:return坑,在方法中,返回值的类型已经指定了,所以可以放心使用return,但是在函数中,没 ...

  6. 在O(1)的时间内删除链表节点

    题目: 在O(1)的时间内删除链表节点.给定链表的头指针和待删除的节点指针,定义一个函数在O(1)的时间内删除该节点. 剑指offer的思路,顿时觉得极妙.删除节点node1,先把其下一个节点node ...

  7. JAVA-AbstractQueuedSynchronizer-AQS

    import lombok.extern.slf4j.Slf4j; import java.util.concurrent.CountDownLatch; import java.util.concu ...

  8. 让js中的函数只有一次有效调用

    设置隐藏域~ <input type="hidden" value="1" id="flag" /> 其它三种方法

  9. nginx.conf配置demo

    #user nobody; worker_processes 4; #error_log logs/error.log; #error_log logs/error.log notice; #erro ...

  10. Spring Security 解析(二) —— 认证过程

    Spring Security 解析(二) -- 认证过程   在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring Security .S ...