目录

题目链接

luogu P2962 [USACO09NOV]灯Lights

题解

可以折半搜索

map合并

复杂度

2^(n / 2)*logn

高斯消元后得到每个点的翻转状态

爆搜自由元得到最优翻转状态

// luogu-judger-enable-o2
#include<map>
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define gc getchar()
#define pc putchar
inline int read() {
int x = 0,f = 1;
char c = getchar();
while(c < '0' || c > '9') c = getchar();
while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = getchar();
return x * f;
}
void print(int x) {
if(x < 0) {
putchar('-');
x = -x;
}
if(x >= 10) print(x / 10);
putchar(x % 10 + '0');
}
#define LL long long
int n,m;
LL s[200];
int cnt,ans = 0x3f3f3f3f;
std::map<LL,int>b;
LL ed;
bool flag;
void dfs(int x,LL now,int used) {
if(x == cnt + 1) {
if(now == ed) ans = std::min(used,ans);
if(!flag) {
int t = b[now];
if(!t || t > used) b[now] = used;
} else {
int t = b[ed ^ now] ;
if(!t) return ;
ans = std::min(ans,t + used);
}
return ;
}
dfs(x + 1,now,used);
dfs(x + 1,now ^ s[x],used + 1);
}
int main() {
//freopen("data.cpp","r",stdin);
n = read(), m = read();
for(int i = 1;i <= m;++ i) {
int u = read(),v = read();
s[u] |= (1ll << v - 1) ,s[v] |= (1ll << u - 1);
}
ed = (1ll << n) - 1;
//print(ed); pc('\n');
for(int i = 1;i <= n;++ i) s[i] |= (1ll << i - 1);
cnt = n / 2;
dfs(1,0,0);
flag = 1; cnt = n;
dfs(n / 2 + 1,0,0);
print(ans);
pc('\n');
}
#include<map>
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define rep(a,b,c) for(int a = b; a <= c;++ a)
#define per(a,b,c) for(int a = b; a >= c; -- a)
#define gc getchar()
#define pc putchar
inline int read() {
int x = 0,f = 1;
char c = getchar();
while(c < '0' || c > '9') c = getchar();
while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = getchar();
return x * f;
}
void print(int x) {
if(x < 0) {
putchar('-');
x = -x;
}
if(x >= 10) print(x / 10);
putchar(x % 10 + '0');
}
#define LL long long
int n,m;
const int maxn = 37;
int f[maxn][maxn];
bool flag;
void guass() {
rep(i,1,n) {
int j = i;
while(!f[j][i] && j <= n) ++ j;
if(j == n + 1) continue;
if(i != j) swap(f[i],f[j]);
rep(j,1,n)
if(j != i && f[j][i])
rep(k,1,n + 1)
f[j][k] ^= f[i][k];
}
}
int zy[maxn],tot = 0,ans = 0x3f3f3f3f;
void dfs(int now) {
if(tot > ans) return;
if(!now) {
ans = std::min(ans,tot);
return ;
}
if(f[now][now]) {
int t = f[now][n + 1];
rep(i,now + 1,n) if(f[now][i]) t ^= zy[i];
zy[now] = t;
if(t) tot ++;
dfs(now - 1);
if(t) tot --;
} else {
zy[now] = 0;
dfs(now - 1);
zy[now] = 1;
tot ++;
dfs(now - 1);
tot --;
}
}
int main() {
n = read(),m = read();
rep(i,1,n) f[i][i] = f[i][n + 1] = 1;
rep(i,1,m) {
int x = read(),y = read();
f[x][y] = f[y][x] = 1;
}
guass();
dfs(n);
print(ans);
pc('\n');
}

luogu P2962 [USACO09NOV]灯Lights 高斯消元的更多相关文章

  1. LUOGU P2962 [USACO09NOV]灯Lights

    题目描述 Bessie and the cows were playing games in the barn, but the power was reset and the lights were ...

  2. [Usaco2009 Nov]lights(高斯消元)

    luogu 点灯游戏应该很多人都在小时候頽过吧 反正我直到现在也不会 很明显一个灯最多只需要点一次 然后高斯消元 解完肯定剩自由元(就是那些全是0的行) 然后这些都爆搜 由于剩下的自由元不会太多 所以 ...

  3. [洛谷P2962] [USACO09NOV] 灯Lights

    Description Bessie and the cows were playing games in the barn, but the power was reset and the ligh ...

  4. P2962 [USACO09NOV]灯Lights

    贝希和她的闺密们在她们的牛棚中玩游戏.但是天不从人愿,突然,牛棚的电源跳闸了,所有的灯都被关闭了.贝希是一个很胆小的女生,在伸手不见拇指的无尽的黑暗中,她感到惊恐,痛苦与绝望.她希望您能够帮帮她,把所 ...

  5. 【Luogu】P3317重建(高斯消元+矩阵树定理)

    题目链接 因为这个专门跑去学了矩阵树定理和高斯消元qwq 不过不是很懂.所以这里只放题解 玫葵之蝶的题解 某未知dalao的矩阵树定理 代码 #include<cstdio> #inclu ...

  6. luogu 3389 【模板】高斯消元

    大概就是对每一行先找到最大的减小误差,然后代入消元 #include<iostream> #include<cstdio> #include<cstring> #i ...

  7. P2962 [USACO09NOV]灯Lights 对抗搜索

    \(\color{#0066ff}{题目描述}\) 贝希和她的闺密们在她们的牛棚中玩游戏.但是天不从人愿,突然,牛棚的电源跳闸了,所有的灯都被关闭了.贝希是一个很胆小的女生,在伸手不见拇指的无尽的黑暗 ...

  8. 洛谷 P2962 [USACO09NOV]灯Lights

    题目描述 Bessie and the cows were playing games in the barn, but the power was reset and the lights were ...

  9. Luogu P2455 [SDOI2006]线性方程组 真•高斯消元板子

    果然如Miracle学长所说...调了一天...qwq..还是过不了线下的Hack upd after 40min:刚刚过了 就是多了一个判无解的操作... 当系数都为0,且常数项不为0时,即为无解. ...

随机推荐

  1. Niagara物联网框架机制二(笔记)

    一.Niagara框架 1.一个Niagara 系统中有四种典型的Programs,这些程序间的关系及其网络通讯关系可通过下面的通讯图表解释 2. Niagara  Programs station ...

  2. python网络爬虫笔记(五)

    一.python的类对象的继承 1.所有的父类都是object类,由于类可以起到模块的作用,因此,可以在创建实例的时候,巴西一些认为必须要绑定的属性填写上去,通过定义一个特殊的方法 __init__, ...

  3. poj2513--并查集+欧拉路+字典树

    经典好题,自己不知道哪里错了交上去是RE,可能是数组开的不好吧,字典树老碰到这种问题.. 先马上别人的代码,有空对拍看看 #include <cstdio> #include <cs ...

  4. ajax请求成功 但是被error拦截

    前端与后台的数据格式不符合 例如后台发过来的一段数据格式是json 然而我们却用默认的fromData去解析,便会被error拦截 在ajax 添加 dataType:'json',

  5. oa项目环境搭建的操作步骤详解

    dto:多表关联查询用单独建一个类,把查询数据放dto即可 vo:是view的缩写.单独定义一个类

  6. VS2017+mysql5.7 连接数据库生成实体

    参考:https://www.cnblogs.com/RushPasser/p/5438334.html 下载:https://share.weiyun.com/5rM4FrG mysql-for-v ...

  7. 集群部署时的分布式session如何实现

    tomcat + redis 这个其实还挺方便的,就是使用session的代码跟以前一样,还是基于tomcat原生的session支持即可,然后就是用一个叫做Tomcat RedisSessionMa ...

  8. [转] 最详尽的 JS 原型与原型链终极详解

    四. __proto__ JS 在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做__proto__ 的内置属性,用于指向创建它的构造函数的原型对象. 对象 person1 有一个 __pr ...

  9. signal() 和 sigaction()

    [摘自<Linux/Unix系统编程手册>] Unix系统提供了两种方式来改变信号处置:signal() 和 sigaction(). signal() 的行为在不同Unix实现间存在差异 ...

  10. Spring MVC基础知识整理➣拦截器和自定义注解

    概述 Spring MVC中通过注解来对方法或者类进行动态的说明或者标注,类似于配置标识文件的属性信息.当标注的类或者方式被使用时候,通过提取注解信息来达到对类的动态处理.在 MVC中,我们常用的注解 ...