ABC366 G - XOR Neighbors 题解
发现题目实质上就是让你构造一组
看到
具体地,有
从后往前构造解,如果
后一点比较容易理解,前一点不太容易理解,我认为这样子填
的话对于 的 的第 位反映的是 对 是否有影响,如果 , 的第 位一定是 ,这样子 对 没有影响,这样子 是 这件事就和 无关的。类似的,可以发现这和每一个填 的 都没有关系,那么只能说明 是命中注定的,该局面无解。 事实上有人在
时填 rand
也过了。
如果存在一个
点击开 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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下