HDU 5765 Bonds(状压DP)
【题目链接】 http://acm.hdu.edu.cn/showproblem.php?pid=5765
【题目大意】
给出一张图,求每条边在所有边割集中出现的次数。
【题解】
利用状压DP,计算不同的连通块,对于每条边,求出两边的联通块的划分方案数,就是对于该点的答案。
【代码】
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int n,m,T,Cas=1,x[400],y[400],mp[(1<<20)+5],ans,sta[21];
bool g[21][21],dp[(1<<21)+5];
int main(){
scanf("%d",&T);
memset(mp,-1,sizeof(mp));
for(int i=0;i<20;i++)mp[1<<i]=i;
while(T--){
scanf("%d%d",&n,&m);
memset(g,0,sizeof(g));
memset(sta,0,sizeof(sta));
for(int i=1;i<=m;i++){
scanf("%d%d",&x[i],&y[i]);
if(x[i]<y[i])swap(x[i],y[i]);
g[x[i]][y[i]]=g[y[i]][x[i]]=1;
sta[x[i]]|=1<<y[i];
sta[y[i]]|=1<<x[i];
}dp[0]=1;
for(int s=1;s<(1<<n);s++){
dp[s]=0;
if(s==(s&-s)){dp[s]=1;continue;}
for(int x=0;x<n;x++){
if(s&(1<<x)){if(dp[s^(1<<x)]&&(sta[x]&s)){dp[s]=1;break;}}
}
}printf("Case #%d:",Cas++);
for(int i=1;i<=m;i++){
ans=0;
for(int s1=0;s1<(1<<(n-x[i]-1));s1++)
for(int s2=0;s2<(1<<(x[i]-y[i]-1));s2++)
for(int s3=0;s3<(1<<y[i]);s3++){
int s=s3|(s2<<(y[i]+1))|(1<<x[i])|(s1<<(x[i]+1));
if(dp[s]&&dp[((1<<n)-1)^s])ans++;
}printf(" %d",ans);
}puts("");
}return 0;
}
HDU 5765 Bonds(状压DP)的更多相关文章
- HDU 4284Travel(状压DP)
HDU 4284 Travel 有N个城市,M条边和H个这个人(PP)必须要去的城市,在每个城市里他都必须要“打工”,打工需要花费Di,可以挣到Ci,每条边有一个花费,现在求PP可不可以从起点1 ...
- HDU 4336 容斥原理 || 状压DP
状压DP :F(S)=Sum*F(S)+p(x1)*F(S^(1<<x1))+p(x2)*F(S^(1<<x2))...+1; F(S)表示取状态为S的牌的期望次数,Sum表示 ...
- HDU 3001 Travelling ——状压DP
[题目分析] 赤裸裸的状压DP. 每个点可以经过两次,问经过所有点的最短路径. 然后写了一发四进制(真是好写) 然后就MLE了. 懒得写hash了. 改成三进制,顺利A掉,时间垫底. [代码] #in ...
- HDU - 5117 Fluorescent(状压dp+思维)
原题链接 题意 有N个灯和M个开关,每个开关控制着一些灯,如果按下某个开关,就会让对应的灯切换状态:问在每个开关按下与否的一共2^m情况下,每种状态下亮灯的个数的立方的和. 思路1.首先注意到N< ...
- hdu 4114(状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4114 思路:首先是floyd预处理出任意两点之间的最短距离.dp[state1][state2][u] ...
- HDU 3091 - Necklace - [状压DP]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3091 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...
- HDU 3811 Permutation 状压dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3811 Permutation Time Limit: 6000/3000 MS (Java/Othe ...
- HDU 5838 (状压DP+容斥)
Problem Mountain 题目大意 给定一张n*m的地图,由 . 和 X 组成.要求给每个点一个1~n*m的数字(每个点不同),使得编号为X的点小于其周围的点,编号为.的点至少大于一个其周围的 ...
- hdu 4628 Pieces 状压dp
题目链接 枚举所有状态, 1表示这个字符还在原来的串中, 0表示已经取出来了. 代码中j = (j+1)|i的用处是枚举所有包含i状态的状态. #include <iostream> #i ...
- HDU 5045 Contest(状压DP)
Problem Description In the ACM International Collegiate Programming Contest, each team consist of th ...
随机推荐
- mysql——获取所有table名和table字段名。
获取database所有table名: (参考:http://stackoverflow.com/questions/2780284/how-to-get-all-table-names-from-a ...
- spring 源码之IOC 类图
Spring IoC容器是spring框架的核心和基础,IoC容器负责spring Bean的生命周期,是spring框架实现其他扩展功能的基础.容器的继承结构比较复杂,这里画出了spring IoC ...
- python 学习笔记 9 -- Python强大的自省简析
1. 什么是自省? 自省就是自我评价.自我反省.自我批评.自我调控和自我教育,是孔子提出的一种自我道德修养的方法.他说:“见贤思齐焉,见不贤而内自省也.”(<论语·里仁>)当然,我们今天不 ...
- Python进阶之面向对象编程概述
Python面向对象编程(一) .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB& ...
- CSS 实现底部固定
在制作页面有这样一种现象:当一个HTML页面中含有较少的内容时,Web页面的“footer”部分随着飘上来,处在页面的半腰中间,给视觉效果带来极大的影响,让你的页面看上去很不好看,特别是现在宽屏越来越 ...
- tr删除替换详解
tr(translate缩写)主要用于删除文件中的控制字符,或进行字符转换. 语法:tr [–c/d/s/t] [SET1] [SET2] #SET1: 字符集1: SET2:字符集2 -c: ...
- RedMine 版本管理工具
一.介绍: Redmine 是一个开源的.基于Web的项目管理和缺陷跟踪工具.它用日历和甘特图辅助项目及进度可视化显示.同时它又支持多项目管理.Redmine是一个自由开放 源码软件解决方案,它提供集 ...
- 透明窗口(窗口上面文字图片等内容不透明)的实现(使用SetLayeredWindowAttributes API函数)
透明窗口(窗口上面文字图片等内容不透明)的实现 本文讨论通过SetLayeredWindowAttributes来实现本文的目的. SetLayeredWindowAttributes的实现必须将窗口 ...
- Http 请求头中的 Proxy-Connection
平时用 Chrome 开发者工具抓包时,经常会见到 Proxy-Connection 这个请求头.之前一直没去了解什么情况下会产生它,也没去了解它有什么含义.最近看完<HTTP 权威指南> ...
- 用OO方式写键盘字母小游戏
<html> <head> <title>0.0</title> <script> window.onload=functi ...