CodeForces - 1016D Vasya And The Matrix
很明显二进制每一位都是无关的,所以可以先把原问题简化:给矩阵中的每个位置填入0/1,使得特定行/列有奇数个1,其他行/列有偶数个1。
一个比较好想的方法是对行和列 列出 n+m 个异或方程,其中有 n*m 个变量,随便求出一组解就好了(如果有的话)。
但这个貌似并不是很好写。。。
可以把解异或方程转化成 在一个完全二分图(左n个点,右m个点)上选边,每个点可以是黑的(对应行/列要求有奇数个1)或者白的(反之),每选一条边就要把两端的点的黑白性颠倒。
然后发现这是一个经典问题,显然选的边可以只存在与随便一颗生成树上,因为加入后可以成环的边不会影响答案。
并且可以发现无解当且仅当有奇数个黑点,因为选一条边不会改变图中黑点个数的奇偶性,而我们要求最后所有点都消成白点。
其他情况都有解,这里只从操作意义上解释为什么(但其实方程组的证明也很简单,因为你考虑一下把所有n+m行异或起来,会得到一个全空行,也就是有一个方程其实是没有用的,于是总是有解的)。
考虑一种构造方案:我们对这颗随便找的生成树做一遍dfs,先把子树中的其他节点都处理成白的之后,如果当前节点是黑的,那么就选它到它father的边;否则不选。
显然这样做总能保证除了根的其他节点都会变成白色,但又因为选一条边不会改变图中黑点的奇偶性,并且已经保证有偶数个黑点了,所以最后根也一定是白色的。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
#define pb push_back
const int N=105; vector<int> g[N*2];
int n,m,a[N*2],ans[N][N],Xor[N*2],now; inline void pt(int x,int y){
if(x>y) swap(x,y);
ans[x][y-n]|=now;
} void dfs(int x,int fa){
for(int i:g[x]) if(i!=fa){
dfs(i,x);
if(Xor[i]) Xor[x]^=now,pt(x,i);
}
} int main(){
scanf("%d%d",&n,&m),m+=n;
for(int i=1;i<=m;i++) scanf("%d",a+i); for(int i=n+1;i<=m;i++) g[1].pb(i),g[i].pb(1);
for(int i=2;i<=n;i++) g[i].pb(n+1),g[n+1].pb(i); for(now=1;now<=1e9;now<<=1){
for(int i=1;i<=m;i++) Xor[i]=a[i]&now;
dfs(1,0);
if(Xor[1]){ puts("NO"); return 0;}
} puts("YES"),m-=n; for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) printf("%d ",ans[i][j]);
puts("");
} return 0;
}
CodeForces - 1016D Vasya And The Matrix的更多相关文章
- Educational Codeforces Round 48 (Rated for Div. 2) D 1016D Vasya And The Matrix (构造)
D. Vasya And The Matrix time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- 1016D.Vasya And The Matrix#矩阵存在
题目出处:http://codeforces.com/contest/1016/problem/D #include<iostream> #define ll long long int ...
- Vasya And The Matrix CodeForces - 1016D (思维+构造)
Now Vasya is taking an exam in mathematics. In order to get a good mark, Vasya needs to guess the ma ...
- D. Vasya And The Matrix(Educational Codeforces Round 48)
D. Vasya And The Matrix time limit per test2 seconds memory limit per test256 megabytes inputstandar ...
- CF 1042 E. Vasya and Magic Matrix
E. Vasya and Magic Matrix http://codeforces.com/contest/1042/problem/E 题意: 一个n*m的矩阵,每个位置有一个元素,给定一个起点 ...
- codeforces1016 D. Vasya And The Matrix(思维+神奇构造)
D. Vasya And The Matrix time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- CodeForces - 837E - Vasya's Function | Educational Codeforces Round 26
/* CodeForces - 837E - Vasya's Function [ 数论 ] | Educational Codeforces Round 26 题意: f(a, 0) = 0; f( ...
- 【Educational Codeforces Round 48 (Rated for Div. 2) D】Vasya And The Matrix
[链接] 我是链接,点我呀:) [题意] 告诉你每一行.每一列的异或和. 让你求出一个符合要求的原矩阵. [题解] 显然应该有 a1^a2^....^an = b1^b2^....^bn 也即两边同时 ...
- Educational Codeforces Round 48 D Vasya And The Matrix
EDU #48 D 题意:给定一个矩阵,已知每一行和每一列上数字的异或和,问矩阵上的数字是多少,不存在则输出NO. 思路:构造题,可以考虑只填最后一行,和最后一列,其中(n,m)要特判一下.其他格子给 ...
随机推荐
- 20155117 王震宇 2006-2007-2 《Java程序设计》第三周学习总结
20155117 王震宇 2006-2007-2 <Java程序设计>第三周学习总结 教材学习内容总结 在JAVA程序编写中,常常要用到对象(Object),要产生对象首先要定义类(Cla ...
- https://segmentfault.com/bookmark/1230000008276077
https://segmentfault.com/bookmark/1230000008276077
- 23、Xpath
1.什么是Xpath?1.XPath即为XMLPath的简称,它是一种用来确定XML文档中某部分位置的语言.2.HTML可以看做是XML的一种实现,所以selenium用户可以使用这种强大的语言在we ...
- bzoj 1934最小割
比较显然的最小割的题,增加节点source,sink,对于所有选1的人我们可以(source,i,1),选0的人我们可以(i,sink,1),然后对于好朋友我们可以连接(i,j,1)(j,i,1),然 ...
- Java八种基本类型
boolean 二进制位: true ,false byte 二进制位:8 -128 - 127 -2的7次方到2的7次方-1 char 二进制位:16 0 - 65535 short 二 ...
- Linux下的lds链接脚本详解【转】
转自:http://www.cnblogs.com/li-hao/p/4107964.html 转载自:http://linux.chinaunix.net/techdoc/beginner/2009 ...
- __inet_insert_ifa/__inet_del_ifa
/* 添加ip地址 主地址添加到最后一个满足范围的主地址后面 从地址添加到整个列表后面 若列表中存在与插入地址在同一子网的地址,则 要求ip地址不同且范围相同,并且插入地址认为是从地址 */ stat ...
- 常用的Oracle的doc命令
常用的Oracle的doc命令 1.连接数据库 普通用户连接数据库: conn scott/tiger --(默认的用户名/密码).conn 即"connection"连接数据库的 ...
- Jinja2 及 render_template 的深度用法
是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...
- cocos2d-x 开发中使用的一些工具
这些工具平常也用到,不过没有像这样整理出来,这是我在网上看到的.就记录一下. 位图字体工具Bitmap Font Tools BMFont (Windows)FonteditorGlyph Desig ...