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

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

原题链接

题意:

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;
}



目录
相关文章
|
25天前
|
传感器 监控 算法
【计算巢】无线传感器网络(WSN)在智能城市中的应用
【6月更文挑战第3天】智能城市中的无线传感器网络(WSN)在交通监控、环境监测、能源管理和公共安全等领域发挥关键作用。通过模拟代码展示了传感器收集环境数据的过程。尽管面临部署成本、网络安全和数据处理挑战,但WSN为城市发展带来巨大潜力,随着技术进步,将在智能城市中创造更多便利与改善。
【计算巢】无线传感器网络(WSN)在智能城市中的应用
|
6天前
|
Java
【思维导图】JAVA网络编程思维升级:URL与URLConnection的逻辑梳理,助你一臂之力!
【6月更文挑战第22天】Java网络编程中,URL是资源定位器,用于解析和创建网络地址;URLConnection接口负责建立到URL资源的连接。示例展示了如何使用URL类获取协议、主机、端口和路径,以及如何通过HttpURLConnection进行GET/POST请求,设置超时并处理响应。思维导图概述了从创建URL到设置请求属性、发送请求及处理响应的完整流程,帮助理解两者在网络编程中的作用。
|
1月前
|
安全 网络协议 物联网
城域以太网:连接城市的高速网络
【4月更文挑战第22天】
46 0
|
算法 Java BI
m基于遗传算法的城市生活垃圾回收网络优化matlab仿真
m基于遗传算法的城市生活垃圾回收网络优化matlab仿真
126 0
m基于遗传算法的城市生活垃圾回收网络优化matlab仿真
|
安全
创新网络助推城市“深度思考”
创新网络是一种企业创新的新形式,如何通过创新网络把创新的风险降到最低,如何通过创新网络实现创新效益最大化,本文进行讨论。
281 1
|
传感器 数据可视化 安全
智能城市的连接选项:LPWAN和蜂窝网络
网络连接可能会决定智能城市解决方案的成败。本文讨论了为智能城市解决方案选择正确的网络时的一些关键注意事项。智慧城市应该使用通过适合的无线网络连接的物联网解决方案来构建。
348 0
智能城市的连接选项:LPWAN和蜂窝网络
网络工程师第五版思维简图
软考教材【网络工程师第五版】整理思维导图
328 0
网络工程师第五版思维简图
|
数据采集 数据可视化 Python
利用Python网络爬虫抓取微信好友的所在省位和城市分布及其可视化
前几天给大家分享了如何利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例,感兴趣的小伙伴可以点击链接进行查看。今天小编给大家介绍如何利用Python网络爬虫抓取微信好友的省位和城市,并且将其进行可视化,具体的教程如下。
1473 0

热门文章

最新文章