AT3913-XOR Tree【状压dp】

技术AT3913-XOR Tree【状压dp】 AT3913-XOR Tree【状压dp】正题
题目链接:https://www.luogu.com.cn/problem/AT3913题目大意
给出一棵

异或树

正题

链接到:https://www.luogu.com.cn/problem/AT3913

题目大意

给定一个有边权重的树,你可以选择一个链来一次异或所有有相同值的边,并寻找最少的操作数,这样所有边的权重都是\(0\)。

\(2\leq n\leq 10^5,0\leq w16\)

解题思路

一条边的权重可以看作是两个连通点权重的异或,那么我们就可以把这条边看作是点权重。

链的异或可以同时成为最后一个值的异或。

那么问题就变成了给出\(n\)个数字。您可以同时将两个数字与任意一个数字进行异或运算,并寻求最小运算次数,使它们都变成\(0\)。

那么很明显,我们直接异或最优的那个,现在最多只剩下\(16\)个不同的数字了。

考虑形状压力\(dp\),注意如果一个集合可以运算到\(0\),那么这个集合中所有数字的异或和必须是\(0\),因为无论序列如何运算,序列的异或和都不会改变。

那么从理论上讲,如果有\(x\)个数,那么我们运算次数的上限就是\(x-1\),但是如果我们能把集合\(S\)分成两个集合\(T,S-T\)并且这两个集合的异或和是\(0\),那么就变成\。

让\(f_S\)表示最多可以分成多少集\(S\),然后可以转移\ (o (3 {16}) \)。

复杂性:\ (o (n 3 {16}) \)

code

#includecstdio

# includecstring

#包括算法

使用命名空间标准;

const int N=1e5 10,M=16

int n,ans,a[N],v[M],c[1M],f[1M];

int main()

{

scanf('%d ',n);

for(int i=1,x,y,w;在;I){ 0

scanf('%d%d%d ',x,y,w);

a[x]^=w;a[y]^=w;

}

for(int I=0;在;[a[I]];

int MS=(116);

memset(f,0xcf,sizeof(f));

for(int s=1;短信;s)

for(int I=0;i16(一)

if((si)1){ 0

c[s]=c[s-(1i)]^i;

if(!c[s])f[s]=0;

打破;

}

int S=0;f[0]=0;

for(int I=1;i16(一)

ans=(v[i] 1)/2,S |=((v[I]1)I);

if(!s)返回printf('%d\n ',ans)0;

for(int s=1;短信;s){ 0

如果(c[s])继续;

for(int t=(s-1)s;t=(s^t);t=(t-1)s)

f[s]=max(f[s],f[t]f[s^t[1]);

}

printf('%d\n ',ans-f[S]-1);

返回0;

}

/*

0 1 5

1 2 3

2 3 5

*/

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/151779.html

(0)

相关推荐

  • MySQL基础面试题有哪些

    技术MySQL基础面试题有哪些本篇内容主要讲解“MySQL基础面试题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL基础面试题有哪些”吧!关系型数据库什么是关系

    攻略 2021年10月22日
  • 抖音刷赞网址,点击最好的刷抖音点赞平台!

    技术抖音刷赞网址,点击最好的刷抖音点赞平台!在别的平台刷粉,我不知道有什么好处。但是我知道在英才代刷网下单的粉丝质量很高,都是有正常头像和名字的,而且一大部分粉丝是有作品的,质量差不多赶上活人的了。刷粉可以增加账号的活跃

    测评 2021年10月20日
  • go restful接口开发步骤(go语言调用第三方restful api)

    技术gorm+gin怎么实现restful分页本篇内容主要讲解“gorm+gin怎么实现restful分页”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“gorm+gin怎么实

    攻略 2021年12月22日
  • 面向对象设计原则之迪米特法则

    技术面向对象设计原则之迪米特法则 面向对象设计原则之迪米特法则转载来自:https://blog.csdn.net/lovelion/article/details/7563445
    迪米特法则来自于19

    礼包 2021年11月5日
  • 怎么将python项目打包成exe与安装包

    技术怎么将python项目打包成exe与安装包这篇文章主要介绍“怎么将python项目打包成exe与安装包”,在日常操作中,相信很多人在怎么将python项目打包成exe与安装包问题上存在疑惑,小编查阅了各式资料,整理出

    攻略 2021年11月16日
  • python程序二叉树最大深度(怎样求二叉树的深度用python)

    技术如何找出python二叉树的最大深度这期内容当中小编将会给大家带来有关如何找出python二叉树的最大深度,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1,问题简述 给定一

    攻略 2021年12月13日