BZOJ3149 CTSC2013 复原 搜索
\(N \leq 20\)很适合暴搜……
第二问最大独立集裸题,\(O(2^NN)\)的算法都能过……
考虑第一问,使用搜索寻找可行解
每一次枚举一条弦的两个端点,通过位运算计算与其相交的弦的数量进行剪枝
一些其他的剪枝:
①两个非\(0\)值中间的所有\(0\)的地位是一样的,所以可以将这些\(0\)缩成一个\(0\)
②每一个连通块分别考虑,可以避免大量的重复情况
#include<bits/stdc++.h>
//This code is written by Itst
using namespace std;
inline int read(){
int a = 0;
char c = getchar();
bool f = 0;
while(!isdigit(c) && c != EOF){
if(c == '-')
f = 1;
c = getchar();
}
if(c == EOF)
exit(0);
while(isdigit(c)){
a = a * 10 + c - 48;
c = getchar();
}
return f ? -a : a;
}
bitset < 23 > Edge[23] , cur , ans;
int arr[41] , ansArr[41] , times[21] , ind[21] , N , M , len , cntInd , cntA;
bool vis[41];
queue < int > q;
bool dfs1(int x){
if(x > cntInd)
return 1;
bitset < 23 > tmp;
for(int i = 1 ; i < x ; ++i)
tmp |= 1 << ind[i];
++len;
for(int i = len ; i > 1 ; --i)
arr[i] = arr[i - 1];
for(int i = 1 ; i <= len ; ++i){
arr[i] = ind[x];
++len;
for(int j = len ; j > i + 1 ; --j)
arr[j] = arr[j - 1];
bitset < 23 > p;
p.set();
for(int j = i + 1 ; j <= len ; ++j){
arr[j] = ind[x];
if((p & tmp) == (Edge[ind[x]] & tmp) && dfs1(x + 1))
return 1;
arr[j] = arr[j + 1];
p[arr[j]] = p[arr[j]] ^ 1;
}
--len;
arr[i] = arr[i + 1];
}
--len;
return 0;
}
void dfs2(int x){
if(cur.count() + x <= ans.count())
return;
if(!x)
ans = cur;
if((Edge[x] & cur) == cur){
cur.set(x);
dfs2(x - 1);
cur.reset(x);
}
dfs2(x - 1);
}
int main(){
#ifndef ONLINE_JUDGE
freopen("in","r",stdin);
freopen("out","w",stdout);
#endif
N = read();
M = read();
for(int i = 1 ; i <= N ; ++i){
Edge[i].set();
ind[i] = i;
}
for(int i = 1 ; i <= M ; ++i){
int a = read() , b = read();
Edge[a][b] = Edge[b][a] = 0;
}
for(int i = 1 ; i <= N ; ++i)
if(!vis[i]){
vis[i] = 1;
q.push(i);
ind[cntInd = 1] = i;
while(!q.empty()){
int t = q.front();
q.pop();
for(int j = 1 ; j <= N ; ++j)
if(!vis[j] && !Edge[t][j]){
vis[j] = 1;
q.push(j);
ind[++cntInd] = j;
}
}
memset(arr , 0 , sizeof(arr));
if(dfs1(1))
for(int j = 1 ; j <= cntInd * 2 ; ++j)
ansArr[++cntA] = arr[j];
}
for(int i = 1 ; i <= N * 2 ; ++i)
cout << ansArr[i] << ' ';
cout << endl;
cur.reset();
dfs2(N);
cout << ans.count();
return 0;
}
BZOJ3149 CTSC2013 复原 搜索的更多相关文章
- 3149: [Ctsc2013]复原
3149: [Ctsc2013]复原 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 95 Solved: 44[ ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- [LeetCode] Restore IP Addresses 复原IP地址
Given a string containing only digits, restore it by returning all possible valid IP address combina ...
- 程设大作业xjb写——魔方复原
鸽了那么久总算期中过[爆]去[炸]了...该是时候写写大作业了 [总不能丢给他们不会写的来做吧 一.三阶魔方的几个基本定义 ↑就像这样,可以定义面的称呼:上U下D左L右R前F后B UD之间的叫E,LR ...
- hdu 5535 Cake 构造+记忆化搜索
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5355 题意:给定n与m,其中1<= n <= 1e5,2 <= m <= 10;问 ...
- acm位运算应用 搜索
acm位运算应用 搜索 搜索 此处不讲题目,只讲位运算是怎样在这些题中实现和应用的.由于搜索题往往是基于对状态的操作,位运算往往特别有效,优化之后的效果可以有目共睹. 例1.POJ 132 ...
- HDU-1428(记忆化搜索)
Problem Description LL 最近沉迷于AC不能自拔,每天寝室.机房两点一线.由于长时间坐在电脑边,缺乏运动.他决定充分利用每次从寝室到机房的时间,在校园里散散步.整个HDU 校园呈方 ...
- POJ 1321 棋盘问题(DFS板子题,简单搜索练习)
棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44012 Accepted: 21375 Descriptio ...
- 力扣算法题—093复原IP地址
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135", ...
随机推荐
- Linux 下修改网卡接口名
Linux下修改网卡接口名 by:授客 QQ:1033553122 (测试环境:CentOS-6.0-x86_64-bin-DVD1.iso+Vmware) 作用 可以用于解决类似如下Device n ...
- springboot 学习之路 20 (整合RabbitMQ)
整合RabbitMQ: 我的操作系统是window7 ,所以在整合ribbotMQ之前需要先安装rabbitMq服务:安装步骤请参考:window下安装RabbitMQ 这个详细介绍了安装步骤,请按 ...
- SpringCloud+Feign环境下文件上传与form-data同时存在的解决办法(2)
书接上文. 上文中描述了如何在 SpringCloud+Feign环境下上传文件与form-data同时存在的解决办法,实践证明基本可行,但却会引入其他问题. 主要导致的后果是: 1. 无法与普通Fe ...
- ER模型试题
M公司为了便于开展和管理各项业务活动,提高公司的知名度和影响力,拟构建一个基于网络的会议策划系统. [需求分析结果] 该系统的部分功能及初步需求分析的结果如下 : (1)M公司旗下有业务部.策划部和其 ...
- [20171220]toad plsql显示整形的bug.txt
[20171220]toad plsql显示整形的bug.txt --//下午有itpub网友反应,一个查询在sqlplus,pl/sql下不同.链接如下:--//http://www.itpub.n ...
- python第九十天----jquery
jQuery http://jquery.cuishifeng.cn/ 相当于js的模块,类库 DOM/BOM/JavaScript的类库 一.查找元素 jQuery 选择器 直接找到某个或者某个标签 ...
- 【PAT】B1081 检查密码(15 分)
水题 #include<cstdio> #include<string.h> #include<ctype.h> #include<algorithm> ...
- 第 16 章 C 预处理器和 C 库(qsort() 函数)
/*---------------------------------------- qsorter.c -- 用 qsort() 排序一组数字 --------------------------- ...
- Department and Student
软工结对作业之二 本人ID:杨光海天 031502634 队友(大佬)ID:陈涵 031502106 GitHub链接 BIN文件地址 代码文件 整体概况 模型建立 学生类,属性包括: * 1)编号 ...
- full gc频繁的分析及解决案例
full gc频繁的分析及解决案例 2016-04-14 09:20:54 0个评论 来源:end's coding life 收藏 我要投稿 现象 ? 1 系统报警full ...