牛客 城市网络(倍增 思维)

简介: 牛客 城市网络(倍增 思维)

原题链接

题意:

image.png

思路:

有一个关键信息就是v一定是u的祖先,也就是说从u向根节点跳的时候一定可以到达v

考虑用倍增处理,d p [ i ] [ j ]表示从i向根节点走并且购买了2 j件物品的位置

转移也是正常的转移d p [ i ] [ j ] = d p [ d p [ i ] [ j − 1 ] ] [ j − 1 ]

关键在于d p [ i ] [ 0 ]的确定,d p [ i ] [ 0 ]的含义就是i 向上走第一个大于a [ i ]的位置

如果a [ f a ] > a [ u ] 的话,那么d p [ u ] [ 0 ] = f a

不然,就从d p [ f a ] [ j ]进行倍增来找到d p [ u ] [ 0 ]

处理d p的过程用d f s实现,所以在遍历到u的时候,父节点f a的信息已经保留了。从f a向上跳,如果跳到某个点存在并且价值小于u,跳到这个点后再向上跳;价值大于u的话,说明正确位置在该点下面的点,缩小i继续跳。与正常的倍增一样,i也要从大到小枚举

对于查询,可以将每次询问都增加一个节点x到u,a [ x ] = c,这样方便处理。然后从x向v跳,每次从大到小枚举i,比较深度。由于每个数一定能拆成二进制数,所以一定可以跳到v每次的答案增加2 i

注意:要开两倍数组

代码:

const int maxn=2e5+7;
vector<int>g[maxn];
int n,q,a[maxn],dep[maxn],pos[maxn],dp[maxn][25];
void dfs(int u,int fa){
  dep[u]=dep[fa]+1;
  if(a[fa]>a[u]){
    dp[u][0]=fa;
  }
  else{
    int x=fa;
    for(int i=20;i>=0;i--)
      if(dp[x][i]&&a[dp[x][i]]<=a[u]){
//跳到这个点存在并且价值小于u,跳到这个点再向上跳;价值大于u的话,说明在该点下面的点,缩小i继续跳。
        x=dp[x][i];
      }
    dp[u][0]=dp[x][0];
  }
  for(int i=1;i<=20;i++)
    dp[u][i]=dp[dp[u][i-1]][i-1];
  for(auto t:g[u]){
    if(t==fa) continue;
    dfs(t,u);
  }
}
int main(){
  n=read,q=read;
  rep(i,1,n) a[i]=read;
  rep(i,1,n-1){
    int u=read,v=read;
    g[u].push_back(v);
    g[v].push_back(u);
  }
  rep(i,1,q){
    int u=read,v=read,c=read;
    a[n+i]=c;
    g[n+i].push_back(u);
    g[u].push_back(n+i);
    pos[i]=v;
  }
  dfs(1,0);
  rep(i,1,q){
    int u=n+i,v=pos[i],ans=0;
    for(int i=20;i>=0;i--)
      if(dep[dp[u][i]]>=dep[v]){
        ans+=(1<<i);u=dp[u][i];
      }
    printf("%d\n",ans);
  }
  return 0;
}



目录
相关文章
|
3月前
|
Java
【思维导图】JAVA网络编程思维升级:URL与URLConnection的逻辑梳理,助你一臂之力!
【思维导图】JAVA网络编程思维升级:URL与URLConnection的逻辑梳理,助你一臂之力!
56 1
|
1月前
|
人工智能 安全 搜索推荐
|
2月前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络入门到精通:Python带你搭建AI思维,解锁机器学习的无限可能
【9月更文挑战第10天】神经网络是开启人工智能大门的钥匙,不仅是一种技术,更是模仿人脑思考的奇迹。本文从基础概念入手,通过Python和TensorFlow搭建手写数字识别的神经网络,逐步解析数据加载、模型定义、训练及评估的全过程。随着学习深入,我们将探索深度神经网络、卷积神经网络等高级话题,并掌握优化模型性能的方法。通过不断实践,你将能构建自己的AI系统,解锁机器学习的无限潜能。
44 0
|
3月前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络入门到精通:Python带你搭建AI思维,解锁机器学习的无限可能
【8月更文挑战第3天】踏入人工智能领域,神经网络是开启智慧之门的钥匙。它不仅是一种技术,更是模仿人脑学习与推理的思维方式。从理解神经元间的连接到构建神经网络的基本概念,再到使用Python与TensorFlow搭建手写数字识别模型,每一步都揭示着机器学习的奥秘。随着深入学习,我们将探索更高级的主题,比如深度神经网络、卷积神经网络和循环神经网络,以及如何优化模型性能。掌握背后的数学原理,将帮助我们设计更高效准确的模型。在这个旅程中,Python将是我们的得力助手,引领我们探索AI世界的无限可能。
53 2
|
5月前
|
传感器 监控 算法
【计算巢】无线传感器网络(WSN)在智能城市中的应用
【6月更文挑战第3天】智能城市中的无线传感器网络(WSN)在交通监控、环境监测、能源管理和公共安全等领域发挥关键作用。通过模拟代码展示了传感器收集环境数据的过程。尽管面临部署成本、网络安全和数据处理挑战,但WSN为城市发展带来巨大潜力,随着技术进步,将在智能城市中创造更多便利与改善。
88 3
【计算巢】无线传感器网络(WSN)在智能城市中的应用
|
5月前
|
Java
【思维导图】JAVA网络编程思维升级:URL与URLConnection的逻辑梳理,助你一臂之力!
【6月更文挑战第22天】Java网络编程中,URL是资源定位器,用于解析和创建网络地址;URLConnection接口负责建立到URL资源的连接。示例展示了如何使用URL类获取协议、主机、端口和路径,以及如何通过HttpURLConnection进行GET/POST请求,设置超时并处理响应。思维导图概述了从创建URL到设置请求属性、发送请求及处理响应的完整流程,帮助理解两者在网络编程中的作用。
44 4
|
6月前
|
安全 网络协议 物联网
城域以太网:连接城市的高速网络
【4月更文挑战第22天】
130 0
|
算法 Java BI
m基于遗传算法的城市生活垃圾回收网络优化matlab仿真
m基于遗传算法的城市生活垃圾回收网络优化matlab仿真
155 0
m基于遗传算法的城市生活垃圾回收网络优化matlab仿真
|
安全
创新网络助推城市“深度思考”
创新网络是一种企业创新的新形式,如何通过创新网络把创新的风险降到最低,如何通过创新网络实现创新效益最大化,本文进行讨论。
295 1
|
云安全 安全 算法
百度云安全:如何成功防御能让一座城市瘫痪的网络攻击
前不久,老冀去上海参加了锤子科技新发布的坚果手机发布会,结果在预订的时间又过了一个多小时罗永浩才出来,后来才知道原来锤子科技的网站遭受了数十G的DDoS(分布式拒绝服务)攻击,致使本来准备在发布会后开始预售的网站陷入了瘫痪。
387 0
百度云安全:如何成功防御能让一座城市瘫痪的网络攻击