P4151 [WC2011]最大XOR和路径 题解
题意很清楚就不说了。
看到重复的路径会重复计算异或和,再看到求异或最大值,能想到用线性基,那该怎么搞呢。
我们要从 号节点走到 号节点,我们首先要找到一条从 到 的链,是 。
我们要让异或和最大,既然这是无向图,我们把环走一遍之后还能回来,所以我们走了之后就有可能异或和更大。
然后我们从 去到 ,发现从 号上有一条出边指向一个环,我们从 走向了 ,从 进入这个环,然后走一遍又出来,又经过了一遍 ,于是我们发现 这条链是会经过 遍的,所以他的异或和会抵消掉,所以我们只需要考虑主链和环即可。
然后就转换成了求异或最大值的板子了。
我们把一个环的异或和放到线性基里,然后贪心的去找最大值即可。
/* Work by: TLE_Automation */ #include<cmath> #include<queue> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define LL long long #define int long long using namespace std; const int N = 1e6 + 10; const int MAXN = 2e5 + 10; inline char readchar() { static char buf[100000], *p1 = buf, *p2 = buf; return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1++; } inline int read() { #define readchar getchar int res = 0, f = 0;char ch = readchar(); for(; !isdigit(ch); ch = readchar()) if(ch == '-') f = 1; for(; isdigit(ch); ch = readchar()) res = (res << 1) + (res << 3) + (ch ^ '0'); return f ? -res : res; } inline void print(int x) { if (x < 0 ) putchar('-'), x = -x; if (x > 9 ) print(x / 10); putchar(x % 10 + '0'); } struct node {int u, v, w, nxt;} e[MAXN]; int n, m, p[100], head[MAXN], cnt = 0, dis[MAXN], vis[MAXN]; void add(int u, int v, int w) {e[++cnt] = (node) {u, v, w, head[u]}, head[u] = cnt;} void Insert(int x) { for(int i = 63; i >= 0; i--) { if(x & (1ll << i)) { if(p[i]) x ^= p[i]; else { p[i] = x; break; } } } } void dfs(int u, int sum) { vis[u] = 1, dis[u] = sum; for(int i = head[u]; i; i = e[i].nxt) { int v = e[i].v; if(!vis[v]) dfs(v, dis[u] ^ e[i].w); else Insert(dis[u] ^ dis[v] ^ e[i].w); } } signed main() { n = read(), m = read(); for(int i = 1, u, v, w; i <= m; i++) { u = read(), v = read(), w = read(); add(u, v, w), add(v, u, w); } dfs(1, 0); for(int i = 63; i >= 0; i--) dis[n] = max(dis[n], dis[n] ^ p[i]); return printf("%lld\n", dis[n]), 0; }
本文作者:TLE_Automation
本文链接:https://www.cnblogs.com/tttttttle/p/16298752.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!