1130: [POI2008]POD Subdivision of Kingdom

https://lydsy.com/JudgeOnline/problem.php?id=1130

分析:

  有效状态为$C_{26}^{13}$,所以直接搜索就好了。

代码:

 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#include<cctype>
#include<set>
#include<queue>
#include<vector>
#include<map>
#include<bitset>
using namespace std;
typedef long long LL; inline int read() {
int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int N = ; int e[], num[N];
int All, n, mn = 1e9, ans; int Calc(int x) {
return num[x >> ] + num[x & (( << ) - )];
}
void dfs(int x,int last,int sta,int cnt) { // 当前已经有多少点,上一个点,状态,边数
if (x == n / ) {
if (cnt < mn) mn = cnt, ans = sta;
return ;
}
for (int i = last + ; i < n; ++i) {
if ((sta >> i) & ) continue;
dfs(x + , i, sta | ( << i), cnt - Calc(sta & e[i]) + Calc((All ^ sta) & e[i])); // ^和&的优先级!!
}
}
int main() {
n = read();int m = read();
All = ( << n) - ;
for (int i = ; i <= m; ++i) {
int u = read() - , v = read() - ;
e[u] |= ( << v), e[v] |= ( << u);
}
for (int i = ; i < ( << ); ++i) num[i] = num[i >> ] + (i & );
dfs(, -, , );
if (!(ans & )) ans = (( << n) - ) ^ ans;
for (int i = ; i < n; ++i)
if ((ans >> i) & ) cout << i + << " ";
return ;
}

1130: [POI2008]POD Subdivision of Kingdom的更多相关文章

  1. bzoj1130:[POI2008]POD Subdivision of Kingdom

    传送门 看到数据范围这么小,不由得算了一下暴力复杂度,算出来情况一共只有1e7,不多,再乘上暴力判断的复杂度,好像T了,判断的话位运算可以方便解决 但是我写的优化似乎比较渣,还留了个log,但是还是n ...

  2. [POI2008]POD Subdivision of Kingdom

    Description 给出一个具有N个结点的无向图,将其分成两个集合S1,S2. 这两个集合的点的个数一样多,但连接它们的边最少. Input 第一行给出数字N,M,代表有N个点,M条边. 下面M行 ...

  3. 解题:POI 2008 Subdivision of Kingdom

    题面 还可以这么搜......学到了(PoPoQQQ orz) 我们最朴素的做法是枚举所有状态(当然可以剪,剪完最终实际状态量也是$C_{26}^{13}$的),然后每次$O(n)$扫一遍判断,大概会 ...

  4. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  5. [POI2008]POD-Subdivision of Kingdom(搜索+状压)

    题意 给定一个n个点的无向图,要求将点集分成大小相等的两个子集,使两个子集之间的边数最少 (n<=26) 题解 一开始想了半天DP发现不会,去看题解全是搜索. 所以发现C(1326)可以过我就写 ...

  6. pod Spec管理配置

    pod Spec 为自己的项目添加pod管理功能.前言: 上一篇文章中提到,因为自己在操作的时候遇到很多坑,所在在此做一个记录,同样也希望可以帮到在这个操作上遇到坑的人. 本文将采用配图和加文字的方式 ...

  7. iOS pod install update 慢!!!

    在终端输入: pod install --verbose --no-repo-update pod update --verbose --no-repo-update

  8. 使用 pod install 还是 pod update ?

    翻译自:https://guides.cocoapods.org/using/pod-install-vs-update.html 介绍: 许多人开始使用CocodPods的时候认为pod insta ...

  9. CocoaPods pod install

    加参数可以提升更新的速度 方法1: pod install --verbose --no-repo-update pod update --verbose --no-repo-update 方法2: ...

随机推荐

  1. BZOJ1042:[HAOI2008]硬币购物(DP,容斥)

    Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. Input 第一 ...

  2. Unicode字符集和UTF-8, UTF-16, UTF-32编码

    ASCII 在过去的计算中,ASCII码被用来表示字符.英语只有26个字母和其他一些特殊字符和符号. 下表提供了ASCII字符及其相应的十进制和十六进制值. 可以从上面的表中推断,在十进制数系统中,A ...

  3. 《Android应用测试与调试实战》读书笔记

    一 本书概述 自动化测试篇:Android应用可以使用Java语言配合SDK,也可以使用HTML5技术,还可以用C/C++语言配合NDK技术编写,本书中涵盖了针对这三种技术编写的应用所采用的测试技术. ...

  4. stateless 无状态组件

    使用:

  5. jdk 下载地址 服务器

    https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

  6. node里使用supervisor

    1.npm -g install supervisor(安装) 2.用cd命令定位到项目的根目录 3.supervisor bin/www

  7. yyy loves Maths VII(状压DP)

    题目背景 yyy对某些数字有着情有独钟的喜爱,他叫他们为幸运数字;然而他作死太多,所以把自己讨厌的数字成为"厄运数字" 题目描述 一群同学在和yyy玩一个游戏 每次,他们会给yyy ...

  8. webstorm 常用的快捷键

    1. ctrl + shift + n: 打开工程中的文件,目的是打开当前工程下任意目录的文件.2. ctrl + j: 输出模板3. ctrl + b: 跳到变量申明处4. ctrl + alt + ...

  9. 解决win10安装MySQL数据库出现服务无法启动的问题

    安装mysql的时候一直出现这个问题,在网上找了很多种方法,终于解决了这个问题. 我在官网下载的安装包解压后没有my.ini文件,需要自己添加(红字不要复制) [mysql]# 设置mysql客户端默 ...

  10. 复习宝典之Mysql数据库

    查看更多宝典,请点击<金三银四,你的专属面试宝典> 第一章:mysql数据库 1)mysql与mariaDb MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用 ...