首页 > 其他分享 >CF840E In a Trap

CF840E In a Trap

时间:2023-05-18 17:45:31浏览次数:34  
标签:ch int void tr tp CF840E read Trap

CF840E In a Trap

这题似乎挺经典的。给类似的位运算维护提供了一个思路。

初看题,这个形式很明显是把树上路径拆分成了若干段,这个询问很奇怪。

智商不够阈值分治来凑。每个点向上预处理 \(256\) 的长度的信息,这样就只需考虑高位带来的影响了。那么需要预处理的就是 \(f_{u,k}\) 表示这条链中异或上 \(256k\) 的最大值。这个是方便用 Trie 维护的。

于是就做完了。询问直接跳链查询就行了。

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;

namespace IO {
#define isdigit(x) (x >= '0' && x <= '9')
template<typename T>
  inline void read(T &x) {
  x = 0; char ch = getchar(); int f = 0;
  for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = 1;
  for(; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
  if(f) x = -x;
}
template<typename T, typename... Rest>
inline void read(T &x, Rest&... rest) {
   read(x), read(rest...);
}
template<typename T>
inline void write(T x) {
  if(x < 0) putchar('-'), x = -x;
  if(x > 9) write(x / 10);
  putchar(x % 10 + '0');
}
#undef isdigit
}
using namespace IO;

const int N = 50010;
const int B = 266;
int n, q, a[N], dep[N];
vector<int> G[N];
int adj[N][B], nxt[N];
int f[N][B];

void dfs(int u, int fa) {
  dep[u] = dep[fa] + 1;
  for(int v : G[u]) {
    if(v == fa) continue;
    adj[v][0] = v;
    for(int i = 1; i <= 255; ++i)
      adj[v][i] = adj[u][i - 1];
    nxt[v] = adj[u][255];
    dfs(v, u);
  }
}

struct Trie {
  int tot, tr[N][2];
  
  void clear() {
    for(int i = 1; i <= tot; ++i)
      tr[i][0] = tr[i][1] = 0;
    tot = 1;
  }
  
  void insert(int x) {
    int u = 1;
    for(int i = 15; ~i; --i) {
      int tp = x >> i & 1;
      if(!tr[u][tp]) tr[u][tp] = ++tot;
      u = tr[u][tp];
    }
  }

  int query(int x) {
    int u = 1, res = 0;
    for(int i = 15; ~i; --i) {
      int tp = (x >> i & 1) ^ 1;
      if(tr[u][tp]) u = tr[u][tp], res |= 1 << i;
      else u = tr[u][tp ^ 1];
    }
    return res;
  }
}trie;

void solve()  {
  int u, v, ans = 0, k = 0;
  read(u, v);
  while(dep[nxt[v]] >= dep[u]) {
    ans = max(ans, f[v][k]);
    ++k, v = nxt[v];
  }
  int step = k << 8;
  while(v != u) {
    ans = max(ans, a[v] ^ step);
    v = adj[v][1], ++step;
  }
  ans = max(ans, a[u] ^ step);
  printf("%d\n",ans); 
}

int main() {
  read(n, q);
  for(int i = 1; i <= n; ++i)
    read(a[i]);
  for(int i = 1; i < n; ++i) {
    int u, v;
    read(u, v);
    G[u].emplace_back(v);
    G[v].emplace_back(u);
  }
  
  adj[1][0] = 1;
  dfs(1, 0);

  for(int i = 1; i <= n; ++i) {
    trie.clear();
    for(int j = 0; j <= 255; ++j) {
      int x = adj[i][j];
      if(!x) break;
      trie.insert(a[x] ^ j);
    }
    for(int j = 0; j <= 255; ++j) 
      f[i][j] = trie.query(j << 8);
  }

  while(q--) solve();
  return 0;
}

标签:ch,int,void,tr,tp,CF840E,read,Trap
From: https://www.cnblogs.com/DCH233/p/17412630.html

相关文章

  • layui和bootstrap 对比
    layui和bootstrap对比这两个都属于UI渲染框架。 layui是国人开发的一套框架,2016年出来的,现在已更新到2.X版本了。比较新,轻量级,样式简单好看。bootstrap相对来说是比较成熟的一个框架,现在已经更新到4.X版本。是一个很成熟的框架,这个大部分人一般都用过。适用范围不一样......
  • 初识Bootstrap框架
    title:初识Bootstrap框架abbrlink:22186date:2022-03-0511:37:22tags:Bootstrap框架Bootstrap,来自Twitter,是目前最受欢迎的前端框架。Bootstrap是基于HTML、CSS、JAVASCRIPT的,它简洁灵活,使得Web开发更加快捷。框架下载Bootstrap中文网引用<metaname="view......
  • bootstrap 学习(一)
    一、Bootstrap简介1、什么是BootstrapBootstrap是一个用于快速开发web应用程序和网站的开源的UI前端框架。Bootstrp是基于HTML、CSS、JS的。2、Bootstrap的好处移动设备优先:自Bootstrap3起,框架包含了贯穿于整个库的移动设备优先的样式。浏览器支持:所有的主流......
  • 【问题解决】Kafka报错 Bootstrap broker x.x.x.x:9092 (id: -1 rack: null) disconne
    问题复现近日针对某一客户需求开发了一个需要使用Kafka的功能,功能是什么暂且不论,在本地虚机的Kafka连接一切正常遂放到测试服务器上验证功能,以下是监听topic成功和警告报错:2023-05-0910:22:23[localhost-startStop-1]INFOorg.apache.kafka.clients.consumer.ConsumerConfig......
  • bootstrap-select组件
    bootstrap-select组件mmkkuoi于2021-10-1312:08:55发布10178收藏19分类专栏:js文章标签:bootstrapselect版权华为云开发者联盟该内容已被华为云开发者联盟社区收录加入社区js专栏收录该内容2篇文章0订阅订阅专栏阅读目录一、组件开源地址以及API说......
  • DevTools failed to load source map: Could not load content for https://xxxxx/boo
    DevToolsfailedtoloadsourcemap:Couldnotloadcontentforhttps://xxxxx/bootstrap-theme.css.map:HTTPerror:statuscode404,net::ERR_HTTP_RESPONSE_CODE_FAILURE这个错误意味着浏览器无法加载指定的CSSsourcemap文件。CSSsourcemap文件通常用于调试前端......
  • Bootstrap + Django - 前端bootstrap-table列表数据使用回调函数控制显示某一列数据
    前端bootstrap-table列表数据使用回调函数控制显示某一列数据1.效果1.有可以操作用户的权限,显示操作列2.无操作用户的权限,不显示操作列2.主要代码1.前端js<script>var$articlesTable=$('#table').bootstrapTable('destroy').bootstrapTable({url:'/team......
  • Bootstrap学习笔记
    目录1总览2Bootstrap网格系统2.1核心特性2.2固定布局2.3响应式布局2.4行列对齐3Bootstrap基础组件4Bootstrap高级组件本文是笔者在学习Bootstrap框架时整理的笔记,通过本文,读者可以初步了解该框架的基本用法和前端开发的大体思路。1总览Bootstrap官网:https://getbootst......
  • BootstrapBlazor组件保姆级教程
    BootstrapBlazor组件库保姆级使用教程BootstrapBlazor组件库官网https://www.blazor.zone/componentsBootstrapBlazor组件库github仓库地址https://github.com/dotnetcore/BootstrapBlazorBootstrapBlazor组件库gitee仓库地址https://gitee.com/LongbowEnterprise/Bootstra......
  • 直播平台搭建源码,bootstrap实现图片轮播效果
    直播平台搭建源码,bootstrap实现图片轮播效果<!DOCTYPEhtml><html><head>  <metacharset="UTF-8">  <title>设计轮播图效果</title>  <metaname="viewport"content="width=device-width,initial-scale=1,shrink-to-fit=......