bzoj 2466 异或方程组
对于每个灯,我们用一个变量表示其决策,xu=0表示不选,xu=1表示选。因为每个灯最后必须都亮,所以每个等都对应一个异或方程。
解这个异或方程组,有几种情况:
1、存在唯一解(得到的上三角系数矩阵的主对角线上的元素全部为1)
2、无解(存在某行系数全为0,但等式右边不为0)
3、存在v个自由元(即主对角线上有v个0,我们枚举每个自由元的取值,有2v种情况)
我们统计所有合法解的最小的值作为答案。
/**************************************************************
Problem: 2466
User: idy002
Language: C++
Result: Accepted
Time:16 ms
Memory:1352 kb
****************************************************************/ #include <cstdio>
#include <cstring>
#include <iostream>
#define N 100
#define oo 0x3f3f3f3f
using namespace std; int n, ans;
int head[N], dest[N<<], next[N<<], etot;
int aa[N][N+], bb[N][N+], cc[N];
int stk[N], top; void init() {
memset( head, , sizeof(head) );
etot = ;
top = ;
ans = oo;
}
void adde( int u, int v ) {
etot++;
next[etot] = head[u];
dest[etot] = v;
head[u] = etot;
}
void print() {
for( int i=; i<n; i++ ) {
for( int j=; j<=n; j++ )
printf( "%d ", aa[i][j] );
printf( "\n" );
}
printf( "\n" );
}
void gauss() {
for( int i=; i<n; i++ ) {
for( int j=i; j<n; j++ ) {
if( aa[j][i]== ) {
for( int k=i; k<=n; k++ )
swap( aa[i][k], aa[j][k] );
break;
}
}
if( aa[i][i]== ) {
for( int j=i+; j<n; j++ ) {
if( aa[j][i]== ) {
for( int k=i; k<=n; k++ )
aa[j][k] ^= aa[i][k];
}
}
} else {
stk[top++] = i;
}
// print();
}
}
int calc() {
memcpy( bb, aa, sizeof(aa) );
int rt = ;
for( int i=n-; i>=; i-- ) {
bool a=bb[i][i], b=bb[i][n];
if( a ) {
if( b ) {
rt++;
for( int j=i-; j>=; j-- )
bb[j][n] ^= bb[j][i];
} else {
// do nothing
}
} else {
if( b ) {
return oo;
} else {
if( cc[i] ) {
rt++;
for( int j=i-; j>=; j-- )
bb[j][n] ^= bb[j][i];
}
}
}
}
return rt;
}
void dfs( int i ) {
if( i==top ) {
int tans = calc();
if( ans>tans ) ans=tans;
return;
}
cc[stk[i]]=;
dfs(i+);
cc[stk[i]]=;
dfs(i+);
}
int main() {
while( scanf("%d",&n)== && n!= ) {
init();
for( int t=,u,v; t<n; t++ ) {
scanf( "%d%d", &u, &v );
u--, v--;
adde(u,v);
adde(v,u);
}
memset( aa, , sizeof(aa) );
for( int u=; u<n; u++ ) {
aa[u][u] = ;
for( int t=head[u]; t; t=next[t] ) {
int v=dest[t];
aa[v][u] = ;
}
}
for( int v=; v<n; v++ )
aa[v][n] = ;
gauss();
dfs();
printf( "%d\n", ans );
}
}
bzoj 2466 异或方程组的更多相关文章
- 【BZOJ】2466: [中山市选2009]树 高斯消元解异或方程组
[题意]给定一棵树的灯,按一次x改变与x距离<=1的点的状态,求全0到全1的最少次数.n<=100. [算法]高斯消元解异或方程组 [题解]设f[i]=0/1表示是否按第i个点的按钮,根据 ...
- bzoj千题计划187:bzoj1770: [Usaco2009 Nov]lights 燈 (高斯消元解异或方程组+枚举自由元)
http://www.lydsy.com/JudgeOnline/problem.php?id=1770 a[i][j] 表示i对j有影响 高斯消元解异或方程组 然后dfs枚举自由元确定最优解 #in ...
- bzoj千题计划105:bzoj3503: [Cqoi2014]和谐矩阵(高斯消元法解异或方程组)
http://www.lydsy.com/JudgeOnline/problem.php?id=3503 b[i][j] 表示i对j是否有影响 高斯消元解异或方程组 bitset优化 #include ...
- BZOJ.1923.[SDOI2010]外星千足虫(高斯消元 异或方程组 bitset)
题目链接 m个方程,n个未知量,求解异或方程组. 复杂度比较高,需要借助bitset压位. 感觉自己以前写的(异或)高斯消元是假的..而且黄学长的写法都不需要回代. //1100kb 324ms #i ...
- 高斯消元法求解异或方程组: cojs.tk 539.//BZOJ 1770 牛棚的灯
高斯消元求解异或方程组: 比较不错的一篇文章:http://blog.sina.com.cn/s/blog_51cea4040100g7hl.html cojs.tk 539. 牛棚的灯 ★★☆ ...
- BZOJ 1923 SDOI2010 外星千足虫 异或方程组+bitset
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1923 懒得贴题目了......这就是解一个异或方程组的裸题...... YY了一下异或方程 ...
- 【BZOJ 1770 】 [Usaco2009 Nov]lights 燈 dfs+异或方程组
这道题明显是异或方程组,然而解不一定唯一他要的是众多解中解为1的数的最小值,这个时候我们就需要dfs了我们dfs的时候就是枚举其有不确定解的数上选0或1从而推知其他解,由于我们dfs的时候先0后1,虽 ...
- BZOJ 2466: [中山市选2009]树( 高斯消元 )
高斯消元解异或方程组...然后对自由元进行暴搜.树形dp应该也是可以的... ------------------------------------------------------------- ...
- 【HDU 5833】Zhu and 772002(异或方程组高斯消元)
300个最大质因数小于2000的数,选若干个它们的乘积为完全平方数有多少种方案. 合法方案的每个数的质因数的个数的奇偶值异或起来为0. 比如12=2^2*3,对应的奇偶值为01(2的个数是偶数为0,3 ...
随机推荐
- Hibernate5笔记3--详解Hibernate的API
详解Hibernate的API: (1)Configuration接口: org.hibernate.cfg.Configuration接口的作用是加载主配置文件及映射文件,以实现对Hibernate ...
- 【FCS NOI2018】福建省冬摸鱼笔记 day3
第三天. 计算几何,讲师:叶芃(péng). dalao们日常不记笔记.@ghostfly233说他都知道了,就盼着自适应辛普森积分. 我计算几何基础不好……然而还是没怎么讲实现,感觉没听什么东西进去 ...
- mysql中间件 -> Atlas简介&安装
Atlas简介 Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目.它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上, ...
- python基础--类的方法
一:类的方法说明 类的方法分为实例方法,析构方法,构造方法,类方法,静态方法,属性方法,等等 类方法和静态方法都可以被类和类实例调用,类实例方法仅可以被类实例调用 类方法的隐含调用参数是类,而类实例方 ...
- IOS使用SourceTree
一.安装sourceTree 1.下载 访问SourceTree 软件官方下载地址 : https://www.sourcetreeapp.com 下载macos版本 2.安装 安装和windows安 ...
- 密码记录工具keepass保存密码
https://www.cnblogs.com/wicub/p/5753005.html
- TCP连接建立与断开
tcp状态 LISTEN:侦听来自远方的TCP端口的连接请求 LISTEN:侦听来自远方的TCP端口的连接请求 SYN-SENT:再发送连接请求后等待匹配的连接请求 SYN-RECEIVED:再收到和 ...
- java -D 参数功能解析
我们都知道在启动tomcat或直接执行java命令的时候可以通过参数-XX等来配置虚拟机的大小,同样,也应该留意到java -Dkey=value的参数.那么这个参数是什么作用呢? 使用案例 其实,在 ...
- ubuntu16.04 安装 caffe cuda 相关流程
不多说了,经历了很多莫名其妙的错误最后终于安装好了,直接放安装脚本: #!/bin/bash #安装时要注意有些库可能安装失败以及安装caffe有和protobuf相关错误时可能需要重新对protob ...
- Java 常用的几个lambda表达式
Lambda表达式是Java 8一个非常重要的新特性.它像方法一样,利用很简单的语法来定义参数列表和方法体.目前Lambda表达式已经成为高级编程语言的标配,像Python,Swift,C#等都已经支 ...