HDU 6162 Ch’s gift(LCA 暴力 17多校第九场)
来源:互联网 发布:卖家怎么开淘宝客 编辑:程序博客网 时间:2024/06/06 01:11
题目大意
给你一颗n个节点的树,每个节点有一个权值,给出m组询问,每次询问对于给定的一个点对
(a,b) ,问你a,b两个点的最短路径上点权值在[L,R] 内的和是多少
1≤n,m≤105 分析
这道题数据范围比较小(数据比较弱),直接暴力从两个点出发一步一步往上走直到相遇统计路径上满足条件的点权和即可
官方题解给出了树链剖分的思路,有空再补吧代码
#include<cstdio>#include<iostream>#include<cmath>#include<cstring>#include<cstdlib>#include<queue>#include<map>#include<algorithm>#include<set>#include<stack>using namespace std;#define LL long long intconst int INF=0x3f3f3f3f;const int MAXN=200005;int n,m;LL value[MAXN];int depth[MAXN];int vis[MAXN];int fa[MAXN];LL ans[MAXN];struct Edge{ int v; int next;}edge[MAXN*4];int edgecount;int head[MAXN];void Init(){ edgecount=0; memset(head,-1,sizeof(head)); memset(depth,0,sizeof(depth)); memset(vis,0,sizeof(vis));}void Add_edge(int u,int v){ edge[++edgecount].v=v; edge[edgecount].next=head[u]; head[u]=edgecount;}void Dfs(int u)//搜索求出每个点的父亲{ for(int k=head[u];k!=-1;k=edge[k].next) { int v=edge[k].v; if(vis[v]==0){fa[v]=u;vis[v]=1;depth[v]=depth[u]+1;Dfs(v);} }}LL LCA(int s,int t,int a,int b){ LL ans=0; if(value[s]>=a && value[s]<=b)ans+=value[s]; if(value[t]>=a && value[t]<=b)ans+=value[t]; while(depth[s]<depth[t]) { t=fa[t]; if(value[t]>=a && value[t]<=b)ans+=value[t]; } while(depth[s]>depth[t]) { s=fa[s]; if(value[s]>=a && value[s]<=b)ans+=value[s]; } while(s!=t) { t=fa[t]; s=fa[s]; if(value[s]>=a && value[s]<=b)ans+=value[s]; if(value[t]>=a && value[t]<=b)ans+=value[t]; } if(value[s]>=a && value[s]<=b)ans-=value[s]; return ans;}int main(){ int s,t,a,b; while(scanf("%d%d",&n,&m)!=EOF) { Init(); for(int i=1;i<=n;i++)scanf("%lld",&value[i]); for(int i=1;i<n;i++) { scanf("%d%d",&a,&b); Add_edge(a,b); Add_edge(b,a); } int root=n/2; fa[root]=0; vis[root]=1; Dfs(root); for(int i=1;i<=m;i++) { scanf("%d%d%d%d",&s,&t,&a,&b); ans[i]=LCA(s,t,a,b); } for(int i=1;i<m;i++)printf("%lld ",ans[i]); printf("%lld\n",ans[m]); } return 0;}/*5 21 2 1 3 21 22 43 12 53 5 1 35 3 1 3*/
阅读全文
0 0
- HDU 6162 Ch’s gift(LCA 暴力 17多校第九场)
- HDU 6162 Ch’s gift (树的路径问题 DFS LCA 17多校第九场第2题)
- HDU 6162 Ch’s gift(LCA)
- hdu 6162 Ch’s gift
- HDU 6162 Ch’s gift
- HDU 6162 Ch’s gift
- HDU 6162 Ch's gift
- HDU 6162 Ch’s gift
- HDU6162 Ch’s gift【LCA】
- hdu6162 Ch’s gift(LCA)
- Ch’s gift HDU
- Ch’s gift HDU
- Ch’s gift HDU
- hdu-6162 Ch’s gift 主席树
- hdu-6162 Ch’s gift(树链剖分)
- hdu 6162 Ch’s gift【树链剖分】
- hdu 6162 Ch’s gift(树链刨分)
- hdu 6162 Ch’s gift(主席树+树链剖分)
- UVA116
- 基于Apache服务器的文件列表,即文件的http下载模式
- CMD下操作VPN
- js正则表达式
- C++杂忆集(六)
- HDU 6162 Ch’s gift(LCA 暴力 17多校第九场)
- 出现 libcaffe.so.1.0.0-rc5: cannot open shared object file
- Banner
- 用new调用函数的执行过程
- 【Redis手册四】Redis 数据类型
- Pre-Post-erous!
- sftpDrive1.7.9注册码
- bzoj4145 [AMPPZ2014]The Prices 状压dp
- IOS无法播放TOMCAT服务器中的视频问题