首页 > 其他分享 >ABC366 G - XOR Neighbors 题解

ABC366 G - XOR Neighbors 题解

时间:2024-08-12 14:26:53浏览次数:7  
标签:Neighbors 方程 XOR int 题解 异或 ans

发现题目实质上就是让你构造一组 \(a_{1,2,\dots,n}\),有一些限制,要求一些 \(a\) 异或起来是 \(0\)。

看到 \(n\le 60\),果断列异或方程组,用异或高斯消元。

具体地,有 \(n\) 个方程组,\(a_{i,j}\) 表示第 \(i\) 个方程中 \(j\) 的系数。对于每一个变量 \(i\),要把 \(j>i\) 的方程中的第 \(i\) 项用第 \(i\) 个方程异或起来消掉(如果 \(a_{i,i}=0\) 就把一个 \(a_{j,i}\ne 0\) 且 \(j>i\) 的方程和第 \(i\) 个方程交换),因为等号右边是 \(0\) 所以可以不用处理。

从后往前构造解,如果 \(a_{i,i}=0\),这是可能的,那么就令 \(ans_{i}=2^i-1\);否则,就令 \(ans_i=\bigoplus_{j>i} ans_j\times a_{i,j}\)。

后一点比较容易理解,前一点不太容易理解,我认为这样子填 \(ans_i\) 的话对于 \(j<i\) 的 \(ans_j\) 的第 \(i\) 位反映的是 \(ans_i\) 对 \(ans_j\) 是否有影响,如果 \(ans_j=0\),\(ans_j\) 的第 \(i\) 位一定是 \(0\),这样子 \(ans_i\) 对 \(ans_j\) 没有影响,这样子 \(ans_j\) 是 \(0\) 这件事就和 \(ans_i\) 无关的。类似的,可以发现这和每一个填 \(ans_i=2^i-1\) 的 \(ans_i\) 都没有关系,那么只能说明 \(ans_j=0\) 是命中注定的,该局面无解。

事实上有人在 \(a_{i,i}=0\) 时填 rand 也过了。

如果存在一个 \(ans_i=0\),那么一定无解。

点击开 D
const int N=65;
int n,m,a[N][N]={};
ll ans[N]={};
int main()
{
//	usefile("G");
	int i,j,k,x,y;
	read(n,m);
	for(i=1;i<=m;++i)
		read(x,y),a[x][y]^=1,a[y][x]^=1;
	for(i=1;i<=n;++i) {
		if(!a[i][i]) {
			for(j=i+1;j<=n;++j)
				if(a[j][i]) {
					swap(a[i],a[j]);
					break;
				}
		}
		if(!a[i][i]) continue;
		for(j=i+1;j<=n;++j)
			if(a[j][i]) {
				for(k=1;k<=n;++k)
					a[j][k]^=a[i][k];
			}
	}
	for(i=n;i;--i) {
		if(!a[i][i]) {
			ans[i]=(1ll<<i)-1;
			continue;
		}
		ans[i]=0;
		for(j=i+1;j<=n;++j)
			if(a[i][j])
				ans[i]^=ans[j];
	}
	for(i=1;i<=n;++i)
		if(!ans[i]) {
			printf("No\n");
			return 0;
		}
	printf("Yes\n");
	for(i=1;i<=n;++i)
		printf("%lld ",ans[i]);
	printf("\n");
	return 0;
}

标签:Neighbors,方程,XOR,int,题解,异或,ans
From: https://www.cnblogs.com/fydj/p/-/ABC366G

相关文章

  • 【题解】P3356 火星探险问题
    \(\large\mathfrak{1st.\Preamble|}\)前言这都什么年代了网络流24题居然还能写题解!个人认为这篇题解讲的还是比较详细的。\(\large\mathfrak{2nd.\Solution|}\)题解看到题目的第一眼,我的反应是这样的:这不跟深海机器人问题差不多吗?Ctrl-CCtrl-V秒了。不过我还是讲讲怎......
  • ABC366D 题解
    Solution题意简述给你一个正整数\(N\)和\(N^3\)个非负整数,表示为\(A_{x,y,z}\)其中\(1\leqx,y,z\leqN\)。您将得到以下格式的\(Q\)个查询,必须按顺序处理。对于第\(i\)次查询\((1\leqi\leqQ)\),您将得到一个整数元组\((Lx_i,Rx_i,Ly_i,Ry_i,Lz_i,......
  • 逆序对数列(P2513) - 题解
    [HAOI2009]逆序对数列原题链接题目描述对于一个数列\(\{a_i\}\),如果有\(i<j\)且\(a_i>a_j\),那么我们称\(a_i\)与\(a_j\)为一对逆序对数。若对于任意一个由\(1\simn\)自然数组成的数列,可以很容易求出有多少个逆序对数。那么逆序对数为\(k\)的这样自然数数列到底......
  • ABC366F Maximum Composition 题解
    ABC366FMaximumComposition题解题目大意给定\(N\)个一次函数\(f_i(x)=a_ix+b_i\),从中选出\(K\)个函数\(f_{p_1},f_{p_2},\dots,f_{p_K}\),使得\(f_{p_1}(f_{p_2}(\dotsf_{p_K}))\)最大,求最大值。Solve考虑这样一种情况:我已经选定\(p_{k+1},p_{k+1},\dots,p_K\),现......
  • ABC366F 题解
    Solution题意简述现在有\(N\)个线性函数\(f_1,\dots,f_N\)。函数\(f_i(x)=A_ix+B_i\)。找到一个长度为\(K\)的序列\(p=(p_1,\dots,p_k)\),序列元素为\(K\)个大小在\([1,N]\)的不同整数。输出\(f_{p_1}(f_{p_2}(\dotsf_{p_k}(1)\dots))\)可能的最大值。思路贪心......
  • 爱因斯坦求和约定einsum简单例题解读
    概论在爱因斯坦求和约定或einsum()格式字符串中,所有的索引都可以分为两类:自由索引集和求和索引集。它们的区别很简单:自由索引是用于输出规范中的索引。它们与外层for循环相关联。求和索引是所有其他索引:它们出现在参数规范中,但不出现在输出规范中。之所以称为求和索引,是因......
  • ABC366E 题解
    Solution题意简述二维平面上有\(N\)个点\((x_1,y_1),\dots,(x_N,y_N)\)和一个非负整数\(D\)。求有多少对点对\((x,y)\)满足\(\sum\limits_{i=1}^N(|x-x_i|+|y-y_i|)\leD\)。思路发现\(x_i\)与\(y_i\)的捆绑关系不强(其实是几乎没有关联),所以我们分开考虑,也就是先......
  • 记录JSch连接SFTP Exception:Algorithm negotiation fail问题解决
    问题描述:关于正式环境访问外网连接不成功 1、首先检查是否开放防火墙(已确认开放),策略开放后,通过命令连接是否畅通: 通过telnet命令,可以得出,访问畅通。telnet192.168.1.122 2、查看生产环境日志,观察生产环境访问外网服务器异常:抛出异常,提示:算法协商失败com.jcraft.j......
  • [ABC366C] Balls and Bag Query 题解
    [ABC366C]BallsandBagQuery题解题目传送门AT原题传送门首先是题面的翻译:你有一个袋子,给予\(Q\)次操作,操作有三种1\(x\),将一个写有整数\(x\)的球放入袋中。2\(x\),从袋中取出一个写有整数\(x\)的球。3,查询袋中球上的不同整数的数目。整理了一下思......
  • [ABC366D] Cuboid Sum Query 题解
    [ABC366D]CuboidSumQuery题解原题传送门AT原题传送门题意翻译:给予一个\(N\timesN\timesN\)的三维矩阵,有\(Q\)次询问,对于每次询问,给与四个数,分别为\(L_1,R_1,L_2,R_2,L_3,R_3\)求在三维矩阵中\(a[L_1][L_2][L_3]\)到\(a[R_1][R_2][R_3]\)的区间和。三维前缀......