题意:

  有n(<200)个格子,只有黑白两种颜色.可以通过操作一个格子改变它和其它一些格子的颜色。给出改变的关系和n个格子的初始颜色,输出一种操作方案使所有格子的颜色相同。


Solution:

  很显然的高斯消元。

这里采用了类似SGU275的方法做。

/*
解异或方程组
*/
#include <iostream>
#include <bitset>
#include <cstring>
using namespace std;
const int N = ;
bitset<N> a[N], mask[N];
int base[N];
int Gauss ( int n )
{
for ( int i = ; i <= n; ++i ) {
for ( int j = ; j <= n; ++j ) {
if ( a[i][j] ) {
if ( !~base[j] ) {
mask[i][i] = ;
base[j] = i;
break;
}
a[i] ^= a[base[j]];
mask[i] ^= mask[base[j]];
}
}
}
} int n, m;
int main()
{
ios::sync_with_stdio ( );
cin >> n;
for ( int i = , k; i <= n; ++i ) {
cin >> k;
for ( int j = , t; j <= k; ++j ) {
cin >> t;
a[i][t] = ;
}
}
memset ( base, -, sizeof base );
Gauss ( n );
for ( int i = , k; i <= n; ++i ) {
cin >> k;
a[n + ][i] = k;
a[n + ][i] = k ^ ;
}
int k;
for ( k = ; k <= n; ++k ) {
if ( a[n + ][k] == ) {
if ( !~base[k] ) {
break;
}
a[n + ] ^= a[base[k]];
mask[n + ] ^= mask[base[k]];
}
}
if ( k > n ) {
cout << mask[n + ].count() << endl;
for ( int i = ; i <= n; ++i ) {
if ( mask[n + ][i] )
cout << i << " ";
}
} else {
for ( k = ; k <= n; ++k ) {
if ( a[n + ][k] ) {
if ( !~base[k] ) {
break;
}
a[n + ] ^= a[base[k]];
mask[n + ] ^= mask[base[k]];
}
}
if ( k > n ) {
cout << mask[n + ].count() << endl;
for ( int i = ; i <= n; ++i ) {
if ( mask[n + ][i] )
cout << i << " ";
}
} else {
cout << - << endl;
}
}
}

SGU 260.Puzzle (异或高斯消元)的更多相关文章

  1. POJ 1222【异或高斯消元|二进制状态枚举】

    题目链接:[http://poj.org/problem?id=1222] 题意:Light Out,给出一个5 * 6的0,1矩阵,0表示灯熄灭,反之为灯亮.输出一种方案,使得所有的等都被熄灭. 题 ...

  2. SGU 200 Cracking RSA (高斯消元)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题意:给出m个整理,因子全部为前t个素数.问有多少 ...

  3. Luogu3164 CQOI2014 和谐矩阵 异或高斯消元

    传送门 题意:给出$N,M$,试构造一个$N \times M$的非全$0$矩阵,其中所有格子都满足:它和它上下左右四个格子的权值之和为偶数.$N , M \leq 40$ 可以依据题目中的条件列出有 ...

  4. poj1830开关问题——异或高斯消元

    题目:http://poj.org/problem?id=1830 根据题意,构造出n元方程组: a(1,1)x1 ^ a(1,2)x2 ^ a(1,3)x3 ... a(1,n)xn = st1 ^ ...

  5. POJ1830(异或高斯消元)

    对于某个开关,都有n个选项可能影响它的结果,如果会影响,则系数为1,否则系数为0:最后得到自由元的个数,自由元可选0也可选1. #include <cstdio> #include < ...

  6. SGU 200. Cracking RSA (高斯消元求自由变元个数)

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=200 200. Cracking RSA time limit per test: ...

  7. SGU 275 To xor or not to xor(高斯消元)

    题意: 从n个数中选若干个数,使它们的异或和最大.n<=100 Solution 经典的异或高斯消元. //O(60*n) #include <iostream> using nam ...

  8. BZOJ.1923.[SDOI2010]外星千足虫(高斯消元 异或方程组 bitset)

    题目链接 m个方程,n个未知量,求解异或方程组. 复杂度比较高,需要借助bitset压位. 感觉自己以前写的(异或)高斯消元是假的..而且黄学长的写法都不需要回代. //1100kb 324ms #i ...

  9. 高斯消元 & 线性基【学习笔记】

    高斯消元 & 线性基 本来说不写了,但还是写点吧 [update 2017-02-18]现在发现真的有好多需要思考的地方,网上很多代码感觉都是错误的,虽然题目通过了 [update 2017- ...

随机推荐

  1. HW4.7

    public class Solution { public static void main(String[] args) { double rate = 0.05; double balance ...

  2. POJ3009 Curling 2.0

    正式做POJ的第一题,做出来后又看了别人的代码,就又完善了一下,也通过了.参考 http://blog.sina.com.cn/s/blog_4abcd9bc0100phzb.html 改了之后觉得写 ...

  3. mac os的android开发国内库下载地址

    http://ubuntu.buct.edu.cn/android/repository/

  4. libmad和libmpg123解码mp3在安卓手机上的比较

    libmad和libmpg123解码mp3在安卓手机上的比较1. libmad 选自 http://sourceforge.net/projects/mad  libmad-0.15.1b.tar.g ...

  5. devexpress中gridcontrol头部添加垂直线(右边框)

    winform开发,用devexpress中的gridcontrol控件,头部默认是3D样式,当客户希望像内容一样扁平化显示且需要添加垂直线(右边框)时恶梦开始了..经过一阵摸索发现可以这样解决: 1 ...

  6. jenkins持续集成配置备忘

    配过好几次,但是老忘记.记录备忘. 安装下列插件: ssh和git插件用来下载源码 publish over ssh 插件用来发布代码到测试环境. email插件用来更强大的email配置. file ...

  7. Android完美解决输入框EditText隐藏密码打勾显示密码问题

    长话短说,一共有两种方法.首先你需要在布局文件里面给EditText设置一个android:inputType="numberPassword"属性.我这里默认规定密码只能是数字了 ...

  8. Edit显示行号

    Edit显示代码行号 关键点 使用这个类然后关联Edit的变量为 LineNumberEdit类型的 实现过程 //////////////////////////////////////////// ...

  9. java程序查不出数据来

    同样的错误,不可再犯第三次!!! 数据库中是char,里面带空格,但在pl/sql中这样写可以查出来.如下: select ipostid from product t where ipostid= ...

  10. dom4j中对xml的查增

    package dom; import java.io.FileWriter;import java.util.Iterator; import org.dom4j.Document;import o ...