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时,即为无解. ...
随机推荐
- Web Penetration Testing
1.国外使用的一款在线工具,对web的信息收集很有帮助 地址http://archive.org , WayBack Machine 主界面如下:对百度存档的历史信息进行查询. 2.IP地址归属信息 ...
- Brup Suite 渗透测试笔记(七)
继续接上次笔记: 1.Burp Intruder的payload类型的子模块(Character blocks)使用一种给出的输入字符,根据指定的设置产生指定大小的字符块,表现形式为生成指定长度的字符 ...
- linux 压缩和解压缩
压缩 tar -cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar.jpg tar -czf jpg.tar.gz *.jpg //将目录里所有jpg文件打包成jpg.ta ...
- 饮冰三年-人工智能-Python-16Python基础之迭代器、生成器、装饰器
一:迭代器: 最大的特点:节省内存 1.1 迭代器协议 a:对象必须提供一个next方法, b:执行方法要么返回迭代中的下一项,要么抛弃一个Stopiteration异常, c:只能向后不能向前. 1 ...
- 使用tensorflow构造隐语义模型的推荐系统
先创建一个reader.py,后面的程序将用到其中的函数. from __future__ import absolute_import, division, print_function impor ...
- IntelliJ IDEA 中自动生成 serialVersionUID 的方法
as, idea plugin中搜如下关键字,并安装该插件: GenerateSerialVersionUID 如上图所示,创建一个类并实现Serializable接口,然后按alt+Enter键,即 ...
- 如何把网址配置为http和https可以同时访问
1.打开iis7 ,找到具体站点 2.点击站点后右侧有个绑定按钮 3.点击绑定,增加https,设置端口,ssl选择 iis证书 4.找到ssl设置,要求证书不勾选,客户证书,忽略 5.如果右侧不显示 ...
- 旋转矩阵 The Rotation Matrix
参考: http://www.scratchapixel.com/lessons/mathematics-physics-for-computer-graphics/geometry/how-does ...
- Doracle.jdbc.J2EE13Compliant=true
To make the Oracle driver behave in a Java EE-compliant manner, you must define the following JVM pr ...
- 认识IQueryable和IQueryProvider接口
1.Func<Student, bool>和Expression<Func<Student, bool>>的区别 class Program { static vo ...