当前位置: 首页 > news >正文

【图论】树上差分(点差分)

一.题目

 输入样例:

5 10
3 4
1 5
4 2
5 4
5 4
5 4
3 5
4 3
4 3
1 3
3 5
5 4
1 5 
3 4

输出样例:9


二 .分析

我们可以先建一棵树

但我们发现,这样会超时。

所以,我们想到树上差分

 

三.代码

/*
5 10
3 4
1 5
4 2
5 4
5 4
5 4
3 5
4 3
4 3
1 3
3 5
5 4
1 5 
3 4
*/#include<bits/stdc++.h>
#define maxn 500005
using namespace std;
int n,m;
int head[maxn],depth[maxn],p[maxn][25],d[maxn];
struct Edge{int u,v,next;
}edge[maxn<<1];
int cnt=0;
void add(int u,int v){edge[++cnt]=(Edge){u,v,head[u]}; head[u]=cnt;
}
void dfs(int u,int fa){depth[u]=depth[fa]+1;p[u][0]=fa;for(int i=1;(1<<i)<=depth[u];i++){p[u][i]=p[p[u][i-1]][i-1];}for(int i=head[u];i;i=edge[i].next){int v=edge[i].v;if(v!=fa){dfs(v,u);}}
}
int lca(int x,int y){if(depth[x]<depth[y]) swap(x,y);int lg=0;while((1<<lg)<=depth[x]) lg++;for(int i=lg;i>=0;i--){if(depth[x]-(1<<i)>=depth[y]) x=p[x][i];}if(x==y) return x;for(int i=lg;i>=0;i--){if(p[x][i]!=p[y][i]){x=p[x][i]; y=p[y][i];}}return p[x][0];
}
void dfs2(int u,int fa){for(int i=head[u];i;i=edge[i].next){int v=edge[i].v;if(v!=fa){dfs2(v,u);d[u]+=d[v];}}
}
int main(){cin>>n>>m;for(int i=1;i<=n-1;i++){int u,v;cin>>u>>v;add(u,v);add(v,u);}dfs(1,0); //建树 while(m--){int u,v; cin>>u>>v;d[u]++; d[v]++;int lc=lca(u,v);d[lc]--; d[p[lc][0]]--;}dfs2(1,0); //sum求原数组 int ans=0;for(int i=1;i<=n;i++){ans=max(ans,d[i]);}cout<<ans;return 0;
}

http://www.lryc.cn/news/105372.html

相关文章:

  • 【wrk2】轻量级性能测试工具
  • 华为云低代码平台Astro Canvas 搭建汽车展示大屏——实验指导手册
  • Nodejs 第七章(发布npm包)
  • Spring?Boot项目如何优雅实现Excel导入与导出功能
  • lable 某个名称换行 \n /n /br axisLabel换行 文字换行 echarts
  • 025 - max()函数
  • JDK 8.x 微服务启动JVM参数调优实战
  • Web与HTTP
  • 算法刷题Day 56两个字符串的删除操作+编辑距离
  • Flutter中Dart语言常用知识
  • 11万多英藏对照词典英藏翻译ACCESS\EXCEL数据库
  • 浅谈C语言分支循环语句
  • Spring Boot Starter 剖析与实践 | 京东云技术团队
  • 技术能力提升-《系统架构设计师教程》
  • 【LeetCode 热题 100】矩阵 专题(大多原地算法,需要一定思维)
  • Java 中为什么要把一个数模(10^9+7)
  • RPC与REST有什么区别?
  • 时间复杂度介绍及其计算
  • etcd实现大规模服务治理应用实战
  • 目标检测中 anchor base和anchor free
  • TypeC拓展设计方案|TypeC转HDMI设计方案|CS5261/CS5265芯片设计参数对比
  • SQL Developer中的Active Data Guard
  • 谈谈FFT到底有何用
  • MATLAB | 如何绘制这样的描边散点图?
  • 偶数科技与白鲸开源完成兼容性认证
  • 【机器学习】Feature scaling and Learning Rate (Multi-variable)
  • windows编译ncnn
  • C++和Lua交互总结
  • nvm安装和切换node版本
  • 每日一题8.2 2536