luogu P2962 [USACO09NOV]灯Lights 高斯消元
目录
题目链接
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 高斯消元的更多相关文章
- LUOGU P2962 [USACO09NOV]灯Lights
题目描述 Bessie and the cows were playing games in the barn, but the power was reset and the lights were ...
- [Usaco2009 Nov]lights(高斯消元)
luogu 点灯游戏应该很多人都在小时候頽过吧 反正我直到现在也不会 很明显一个灯最多只需要点一次 然后高斯消元 解完肯定剩自由元(就是那些全是0的行) 然后这些都爆搜 由于剩下的自由元不会太多 所以 ...
- [洛谷P2962] [USACO09NOV] 灯Lights
Description Bessie and the cows were playing games in the barn, but the power was reset and the ligh ...
- P2962 [USACO09NOV]灯Lights
贝希和她的闺密们在她们的牛棚中玩游戏.但是天不从人愿,突然,牛棚的电源跳闸了,所有的灯都被关闭了.贝希是一个很胆小的女生,在伸手不见拇指的无尽的黑暗中,她感到惊恐,痛苦与绝望.她希望您能够帮帮她,把所 ...
- 【Luogu】P3317重建(高斯消元+矩阵树定理)
题目链接 因为这个专门跑去学了矩阵树定理和高斯消元qwq 不过不是很懂.所以这里只放题解 玫葵之蝶的题解 某未知dalao的矩阵树定理 代码 #include<cstdio> #inclu ...
- luogu 3389 【模板】高斯消元
大概就是对每一行先找到最大的减小误差,然后代入消元 #include<iostream> #include<cstdio> #include<cstring> #i ...
- P2962 [USACO09NOV]灯Lights 对抗搜索
\(\color{#0066ff}{题目描述}\) 贝希和她的闺密们在她们的牛棚中玩游戏.但是天不从人愿,突然,牛棚的电源跳闸了,所有的灯都被关闭了.贝希是一个很胆小的女生,在伸手不见拇指的无尽的黑暗 ...
- 洛谷 P2962 [USACO09NOV]灯Lights
题目描述 Bessie and the cows were playing games in the barn, but the power was reset and the lights were ...
- Luogu P2455 [SDOI2006]线性方程组 真•高斯消元板子
果然如Miracle学长所说...调了一天...qwq..还是过不了线下的Hack upd after 40min:刚刚过了 就是多了一个判无解的操作... 当系数都为0,且常数项不为0时,即为无解. ...
随机推荐
- application program Can't Start
一.电脑插U盘中毒之后感染,出现无法启动,但是风扇工作,先拔掉电源,卸掉电池之后重新安装,重启电脑,之后发现电脑桌面上的程序无法启动,360webShield也无法启动,可能是电脑中毒后的假死机现象. ...
- DIY电源拓扑线
记一些小事. 一.材料及工具:电源座DC-005.热熔胶.废弃PCB.锡线.导线.电烙铁.热风枪(或打火机.热熔胶枪) 二.使用热熔胶将电源座粘在一起.两个电源座之间垫一块废弃的PCB,防止两者距离过 ...
- postMan测试https接口
一.如何安装postman? Postman下载地址https://www.getpostman.com/ 我下载的版本是Postman-win64-5.0.0-Setup.exe 这是免安装的,可以 ...
- 论文阅读笔记三十七:Grid R-CNN(CVPR2018)
论文源址:https://arxiv.org/abs/1811.12030 开源代码:未公开 摘要 本文提出了目标检测网络Grid R-CNN,其基于网格定位机制实现准确的目标检测.传统方法主要基于回 ...
- Django系列(一)
项目引入静态文件 更改settings.py,为项目下面的每个APP应用,建立静态文件,这里如blog,首先在blog下面建立一个静态文件夹名为statics,注意这里为别名 STATICFILES_ ...
- C#接口和泛型类
1.定义: 定义为一个约束,实现接口的类或者结构必须遵守该约定.借口是类之间交互的一个协议.定义了类之间的交互标准. 接口是类之间相互交互的一个抽象,把类之间需要交互的内容抽象出来定义成接口. 接口只 ...
- 函数函数sigaction、signal
函数函数sigaction 1. 函数sigaction原型: int sigaction(int signum, const struct sigaction *act, struct sigact ...
- Kubeadm安装的K8S集群1年证书过期问题的解决思路
这个问题,很多使用使用kubeadm的用户都会遇到. 网上也有类似的帖子,从源代码编译这种思路, 在生产环境,有些不现实. 还是使用kubeadm的命令操作,比较自然一点. 当然,自行生成一套证书,也 ...
- NEST - 编写查询
Writing queries Version:5.x 英文原文地址:Writing queries 将数据索引到了 Elasticsearch 之后,就可以准备搜索它们了.Elasticsearch ...
- tomcat-会话绑定
会话保存 1) session sticky source_ip 原地址绑定 nginx: ip_hash haproxy: source lvs: ...