【高斯消元解xor方程组】BZOJ2466-[中山市选2009]树
【题目大意】
给出一棵树,初始状态均为0,每反转一个节点的状态,相邻的节点(父亲或儿子)也会反转,问要使状态均为1,至少操作几次?
【思路】
一场大暴雨即将来临,白昼恍如黑夜!happy!
和POJ1222差不多,首先容易知道:每个节点最多被反转一次,证明略。
高斯消元解Xor方程组可能存在自由元,即处理完后map[i][i]=0;则通过dfs来枚举所有的情况,求出最小的。
【错误点】
gauss里面交换值得时候不要忘了n+1也要跟着交换。
dfs里面的t我一开始直接是按照往常一样修改map[i][n+1],然而这个是dfs,map[i][n+1]的初始值后面还要用到。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=+;
const int INF=0x7fffffff;
int n,map[MAXN][MAXN],que[MAXN];
int ans; void Gauss()
{
for (int i=;i<=n;i++)
{
int t=i;
for (;t<=n && !map[t][i];t++);
if (t<=n)
{
if (t!=i) for (int j=i;j<=n+;j++) swap(map[i][j],map[t][j]);
for (int j=i+;j<=n;j++)
if (map[j][i])
for (int k=i;k<=n+;k++) map[j][k]^=map[i][k];//不要忘记这里要到n+1
}
}
} void dfs(int step,int now)
{
if (now>=ans) return;
if (!step)
{
ans=min(ans,now);
return;
}
if (map[step][step])
{
int t=map[step][n+];
//map[step][n+1]后续回溯中还要使用,所以要暂存给t
for (int i=step+;i<=n;i++)
if (map[step][i]) t^=que[i];//这里不要把step和i搞混了
que[step]=t;
dfs(step-,now+t);
}
else
{
que[step]=;dfs(step-,now);
que[step]=;dfs(step-,now+);
}
} void init()
{
ans=INF;
memset(que,,sizeof(que));
memset(map,,sizeof(map));
for (int i=;i<n-;i++)
{
int u,v;
scanf("%d%d",&u,&v);
map[u][v]=map[v][u]=;
}
for (int i=;i<=n;i++) map[i][i]=,map[i][n+]=;
} int main()
{
while (~scanf("%d",&n))
{
if (n==) break;
init();
Gauss();
dfs(n,);
printf("%d\n",ans);
}
return ;
}
【高斯消元解xor方程组】BZOJ2466-[中山市选2009]树的更多相关文章
- POJ 1222 EXTENDED LIGHTS OUT(高斯消元解XOR方程组)
http://poj.org/problem?id=1222 题意:现在有5*6的开关,1表示亮,0表示灭,按下一个开关后,它上下左右的灯泡会改变亮灭状态,要怎么按使得灯泡全部处于灭状态,输出方案,1 ...
- 【高斯消元解xor方程】BZOJ1923-[Sdoi2010]外星千足虫
[题目大意] 有n个数或为奇数或为偶数,现在进行m次操作,每次取出部分求和,告诉你这几次操作选取的数和它们和的奇偶性.如果通过这m次操作能得到所有数的奇偶性,则输出进行到第n次时即可求出答案:否则输出 ...
- poj1830(高斯消元解mod2方程组)
题目链接:http://poj.org/problem?id=1830 题意:中文题诶- 思路:高斯消元解 mod2 方程组 有 n 个变元,根据给出的条件列 n 个方程组,初始状态和终止状态不同的位 ...
- poj1753(高斯消元解mod2方程组)
题目链接:http://poj.org/problem?id=1753 题意:一个 4*4 的棋盘,初始时上面放满了黑色或白色的棋子.对 (i, j) 位置进行一次操作后 (i, j), (i + 1 ...
- [bzoj2466][中山市选2009]树_树形dp
树 bzoj-2466 中山市选-2009 题目大意:给定一棵树,每一个点有一个按钮和一个灯泡.如果按下一个点的按钮那么和这个点直接相连的点包括这个点的灯泡的状态会改变.如果是点亮就会变成熄灭,如果 ...
- bzoj2466: [中山市选2009]树
同上一题.(应该可以树形dp,然而我不会... #include<cstdio> #include<cstring> #include<iostream> #inc ...
- 【dfs】【高斯消元】【异或方程组】bzoj1770 [Usaco2009 Nov]lights 燈 / bzoj2466 [中山市选2009]树
经典的开关灯问题. 高斯消元后矩阵对角线B[i][i]若是0,则第i个未知数是自由元(S个),它们可以任意取值,而让非自由元顺应它们,得到2S组解. 枚举自由元取0/1,最终得到最优解. 不知为何正着 ...
- poj1222(枚举or高斯消元解mod2方程组)
题目链接: http://poj.org/problem?id=1222 题意: 有一个 5 * 6 的初始矩阵, 1 表示一个亮灯泡, 0 表示一个不亮的灯泡. 对 (i, j) 位置进行一次操作则 ...
- poj1681(枚举or高斯消元解mod2方程组)
题目链接: http://poj.org/problem?id=1681 题意: 有一个包含 n * n 个方格的正方形, w 表示其所在位置为白色, y 表示其所在位置为黄色. 对 (i, j) 位 ...
随机推荐
- Python 用ctypes观察Python对象的内存结构 -- (转)
!!!强烈推荐的好文章!!! 对象的两个基本属性 Python所有对象结构体中的头两个字段都是相同的: refcnt:对象的引用次数,若引用次数为0则表示此对象可以被垃圾回收了. typeid:指向描 ...
- hdfs基本思想
1.hdfs的优缺点 (1)不适合大量小文件存储: (2)不适合并发写入,不支持文件随机修改:(只能append追加) (3)不支持随机读等低延时的访问方式 2.基本思想 主从结构 主节点, name ...
- Caffe学习笔记3
Caffe学习笔记3 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和h ...
- 【Android XML】Android XML 转 Java Code 系列之 style(3)
最近一个月把代码重构了一遍, 感觉舒服多了, 但总体开发进度没有变化.. 今天聊聊把style属性转换成Java代码的办法 先说结论: 引用系统style是无法完美的实现的, 我们如果有写成Java代 ...
- python基础===将json转换为dict的办法
首先json是字符串. 大家都知道,字符串是用来传递信息的.json字符串实际上就是一种规定了格式的字符串, 通过这种格式,我们可以在不同的编程语言之间互相传递信息,比如我们可以把javascript ...
- kivy安装
>>> os.system('pip install kivy')Collecting kivy Downloading Kivy-1.9.1-cp27-none-win_amd64 ...
- 【linux】su和sudo命令的区别
来源:http://www.jb51.net/LINUXjishu/12713.html 一. 使用 su 命令临时切换用户身份 1.su 的适用条件和威力 su命令就是切换用户的工具,怎么理解呢?比 ...
- python_day5学习笔记
一.正则表达式 字符: \d 匹配任何十进制数:相当于类[0-9] \D 匹配任何非数字字符:相当于类[^0-9] \s 匹配任何空白字符:相当于类[ \t\n\r\f\v] \S 匹配任何非空 ...
- hdu 1547(BFS)
Bubble Shooter Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- Spiral Matrix I&&II
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...