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)

相关推荐

  • 如何使用mafft进行多序列比对

    技术如何使用mafft进行多序列比对这篇文章给大家介绍如何使用mafft进行多序列比对,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。对于几千条序列的多序列比对,无论是从准确度还是运行速度上考虑,mu

    攻略 2021年11月10日
  • Java中遍历ConcurrentHashMap的四种方式分别是什么

    技术Java中遍历ConcurrentHashMap的四种方式分别是什么本篇文章给大家分享的是有关Java中遍历ConcurrentHashMap的四种方式分别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完

    攻略 2021年12月8日
  • cocos2dx中的核心类是什么

    技术cocos2dx中的核心类是什么今天就跟大家聊聊有关cocos2dx中的核心类是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、节点类(Node)

    攻略 2021年11月11日
  • 怎么使用flutter中Checkbox复选框的全选与删除

    技术怎么使用flutter中Checkbox复选框的全选与删除本篇内容介绍了“怎么使用flutter中Checkbox复选框的全选与删除”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大

    攻略 2021年10月29日
  • C#基础语法之-泛型

    技术C#基础语法之-泛型 C#基础语法之-泛型泛型:一共7个知识点
    1.引入泛型,延迟声明
    2.如何声明和使用泛型
    3.泛型的好处和原理
    4.泛型类,泛型方法,泛型接口,泛型委托
    5.泛型约束
    6.协变

    礼包 2021年12月18日
  • VTK中常用控件介绍及如何实现圆锥体绘制

    技术VTK中常用控件介绍及如何实现圆锥体绘制VTK中常用控件介绍及如何实现圆锥体绘制,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。利用 VT

    攻略 2021年11月15日