acwing 228 异或 思维,线性基

博客介绍了ACwing第228题,该题是一个关于异或操作的无向联通图问题。题设中,求解从1到n节点的最远路径的异或和最大值。博主通过分析指出,当存在环时,环的权值对结果有直接影响,并且可以使用线性基来解决选边以最大化异或和的问题。博主对于未能直接想到线性基方法感到遗憾。
摘要由CSDN通过智能技术生成

异或

题目链接

题意

给一个带边权的无向联通图(5e4个点)。
x到y的路径距离定义为x点到y点的路径上的边权异或和。
问从1到n的最远路径是多少(异或和)。
一个边、点可以走无数次。

题解。

题解很聪明,而我很笨拙 hhhhhh
因为要求1~n的路径上的边权异或和最大。
1、如果有环,如果想要这个权值,那么这个环的权值一定是取的。
因为是异或,所以
在这里插入图片描述
这样走,会发现只多了一个环的贡献。
2、可以选一个从1~n的路径然后从环里面选几个使得异或最大。
为什么可以这样?
因为如果只有这一条路径从1~n。那么答案就是那个。
如果有其他路径,那么一定会构成环!!(因为是无向图)
构成环,在上面已经统计过了,如果选环上的另一条的答案更优,这条路径异或环的路径,得到的就是另一个路径的答案。!很nice

于是题目就变成了从一些值中选出来几个,与路径的值异或,使答案最大。
这个可以用线性基。
so~ 我为什么就想不到呢,我好菜。

#include <algorithm>
#include <cstdio>
#include <iostream>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <cmath>
#include <set>
#include <cstring>
#include <string>
#include <bitset>
#include <stdlib.h>
#include <time.h> 
using namespace std;
typedef long long ll;
typedef pair<int,ll> pii;
typedef unsigned long long ull;
#define st first
#define sd second
#define mkp make_pair
#define pb push_back
void wenjian(){
   freop
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值