[luoguP2962] [USACO09NOV]灯Lights(高斯消元 + dfs)
先进行高斯消元
因为要求最少的开关次数,那么:
对于关键元,我们可以通过带入消元求出,
对于自由元,我们暴力枚举,进行dfs,因为只有开关两种状态,0或1
#include <cmath>
#include <cstdio>
#include <iostream>
#define N 40 using namespace std; int n, m, sum, mn = ~(1 << 31);
int a[N][N], ans[N]; inline void Guass()
{
int i, j, k;
for(j = 1; j <= n; j++)
{
k = j;
for(i = j; i <= n; i++)
if(a[i][j] > a[k][j])
k = i;
if(k != j) swap(a[k], a[j]);
for(i = j + 1; i <= n; i++)
if(a[i][j])
for(k = j; k <= n + 1; k++)
a[i][k] ^= a[j][k];
}
} inline void dfs(int now, int sum)
{
if(sum >= mn) return;
if(!now)
{
mn = min(mn, sum);
return;
}
int i;
if(a[now][now])
{
ans[now] = a[now][n + 1];
for(i = now + 1; i <= n; i++)
ans[now] ^= (ans[i] * a[now][i]);
dfs(now - 1, sum + bool(ans[now]));
}
else
{
ans[now] = 0;
dfs(now - 1, sum);
ans[now] = 1;
dfs(now - 1, sum + 1);
}
} int main()
{
int i, x, y;
scanf("%d %d", &n, &m);
for(i = 1; i <= n; i++) a[i][i] = 1, a[i][n + 1] = 1;
for(i = 1; i <= m; i++)
{
scanf("%d %d", &x, &y);
a[x][y] = 1;
a[y][x] = 1;
}
Guass();
dfs(n, 0);
printf("%d\n", mn);
return 0;
}
[luoguP2962] [USACO09NOV]灯Lights(高斯消元 + dfs)的更多相关文章
- luogu P2962 [USACO09NOV]灯Lights 高斯消元
目录 题目链接 题解 题目链接 luogu P2962 [USACO09NOV]灯Lights 题解 可以折半搜索 map合并 复杂度 2^(n / 2)*logn 高斯消元后得到每个点的翻转状态 爆 ...
- BZOJ1770:[USACO]lights 燈(高斯消元,DFS)
Description 貝希和她的閨密們在她們的牛棚中玩遊戲.但是天不從人願,突然,牛棚的電源跳閘了,所有的燈都被關閉了.貝希是一個很膽小的女生,在伸手不見拇指的無盡的黑暗中,她感到驚恐,痛苦與絕望. ...
- bzoj 1770: [Usaco2009 Nov]lights 燈【高斯消元+dfs】
参考:https://blog.csdn.net/qq_34564984/article/details/53843777 可能背了假的板子-- 对于每个灯建立方程:与它相邻的灯的开关次数的异或和为1 ...
- Flip Game (高斯消元 || dfs)
Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of its 16 square ...
- [Usaco2009 Nov]lights(高斯消元)
luogu 点灯游戏应该很多人都在小时候頽过吧 反正我直到现在也不会 很明显一个灯最多只需要点一次 然后高斯消元 解完肯定剩自由元(就是那些全是0的行) 然后这些都爆搜 由于剩下的自由元不会太多 所以 ...
- Codeforces 1163E 高斯消元 + dfs
题意:给你一个集合,让你构造一个长度尽量长的排列,使得排列中任意相邻两个位置的数XOR后是集合中的数. 思路:我们考虑枚举i, 然后判断集合中所有小于1 << i的数是否可以构成一组异或空 ...
- POJ1288 Sly Number(高斯消元 dfs枚举)
由于解集只为{0, 1, 2}故消元后需dfs枚举求解 #include<cstdio> #include<iostream> #include<cstdlib> ...
- BZOJ 2466 中山市选2009 树 高斯消元+暴力
题目大意:树上拉灯游戏 高斯消元解异或方程组,对于全部的自由元暴力2^n枚举状态,代入计算 这做法真是一点也不优雅... #include <cstdio> #include <cs ...
- 【dfs】【高斯消元】【异或方程组】bzoj1770 [Usaco2009 Nov]lights 燈 / bzoj2466 [中山市选2009]树
经典的开关灯问题. 高斯消元后矩阵对角线B[i][i]若是0,则第i个未知数是自由元(S个),它们可以任意取值,而让非自由元顺应它们,得到2S组解. 枚举自由元取0/1,最终得到最优解. 不知为何正着 ...
随机推荐
- C. Tennis Championship dp递推 || 找规律
http://codeforces.com/contest/735/problem/C C. Tennis Championship time limit per test 2 seconds mem ...
- Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bhive.session.id%7D_resources
原因:环境变量设置问题 <property> <name>Hive.exec.local.scratchdir</name> <value> ...
- QQ面板拖拽(慕课网DOM事件探秘)(上)
QQ面板拖拽,效果如图 JavaScript代码如下: function getByClass(clsName, parent) { var oParent = parent ? document.g ...
- 【学习笔记】深入理解js原型和闭包(10)——this
接着上一节讲的话,应该轮到“执行上下文栈”了,但是这里不得不插入一节,把this说一下.因为this很重要,js的面试题如果不出几个与this有关的,那出题者都不合格. 其实,this的取值,分四种情 ...
- 【学习笔记】深入理解js闭包
本文转载: 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接 ...
- js dom node.children与node.childNodes区别
不同点:node.children不会取到节点下面的TextNode但是node.childNodes会取到 共同点:两者都是集合类数组,可以通过索引的方式取到值也可以用for循环遍历
- gp服务输出的结果文件输出到绝对路径
gp服务跟本地用arcmap执行gp有个不同,就是输出的文件一般只能输出到arcgis server默认的output目录里面(arcgis server有此限制,无论怎么配还是写到output目录里 ...
- Google的Java编程风格指南
作者:Hawstein出处:http://hawstein.com/posts/google-java-style.html声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Cre ...
- IOS访问webserver接口
接口调用参数只能是字符串格式,返回格式支持3种(字符串,数组,DataSet) 需要引用第三方库,包含(DataSet,PlatServinceDataParser,WebserviceCommon, ...
- 请简述HTML和XHTML最重要的4点不同?
请简述HTML和XHTML最重要的4点不同? 不同: XHTML要求正确嵌套 XHTML 所有元素必须关闭 XHTML 区分大小 ...