题意:

  有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. HW3.22

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  2. Codeforces335B - Palindrome(区间DP)

    题目大意 给定一个长度不超过5*10^4的只包含小写字母的字符串,要求你求它的回文子序列,如果存在长度为100的回文子序列,那么只要输出长度为一百的回文子序列即可,否则输出它的最长回文子序列 题解 这 ...

  3. Codeforces Round #313 (Div. 2) D.Equivalent Strings (字符串)

    感觉题意不太好懂 = =# 给两个字符串 问是否等价等价的定义(满足其中一个条件):1.两个字符串相等 2.字符串均分成两个子串,子串分别等价 因为超时加了ok函数剪枝,93ms过的. #includ ...

  4. 问题-delphi XE2 Stack Overflow- save your work and restart CodeGear

    问题现象:某一天,启动DLEPHI XE2 后,新建一个工程,双击一个事件,“Stack Overflow- save your work and restart CodeGear delphi xe ...

  5. 谁才是最快的消息队列:ActiveMQ, RabbitMQ[转]

    Lately I performed a message queue benchmark, comparing several queuing frameworks (RabbitMQ, Active ...

  6. macos ssh host配置及免密登陆

    windows下面有xshell 这样的可视化ssh管理工具 macos 下面使用终端做下简单配置,也非常方便,具体过程如下 生成秘钥 cd ~/.sshssh-keygen -t rsa 生成了私钥 ...

  7. sudo apt-get install gksu

    exmyth@Inspiron-5437:/etc/default$ gksu gedit apport 程序“gksu”尚未安装. 您可以使用以下命令安装:sudo apt-get install ...

  8. CentOS 修改IP地址, DNS, 网关

    一.CentOS 修改IP地址 修改对应网卡的IP地址的配置文件# vi /etc/sysconfig/network-scripts/ifcfg-eth0 修改以下内容DEVICE=eth0 #描述 ...

  9. mysql查询语句举例

    1. 基础数据表 学生成绩表(stuscore): 姓名:name 课程:subject 分数:score 学号:stuid 张三 数学 89 1 张三 语文 80 1 张三 英语 70 1 李四 数 ...

  10. excel重复数据

    =COUNTIF(H:H,H1)>1