hdu_5044_Tree(树链剖分)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5044
题意:给一棵树,在点和边上操作
题解:树链剖分,剖完后用树状数组维护即可,因为只有加减操作,连树状的部分都不用写,最后要注意当n等于1的情况
- #include<cstdio>
- #pragma comment(linker, "/STACK:1024000000,1024000000")
- #define F(i,a,b) for(int i=a;i<=b;++i)
- const int N=;char op[];
- int t,ic=,n,m,x,y,c,egu[N],egv[N],g[N],nxt[*N],v[*N],ed,dep[N],sz[N],fa[N],hs[N],tid[N],top[N],idx,fid[N],fid2[N];
- __int64 a[N],b[N],ans1[N],ans2[N],all;
- inline void adg(int x,int y){v[++ed]=y,nxt[ed]=g[x],g[x]=ed;}
- void dfs1(int u,int pre){
- sz[u]=,fa[u]=pre,hs[u]=,dep[u]=dep[pre]+;
- for(int i=g[u];i;i=nxt[i]){
- int vv=v[i];
- if(vv!=pre){
- dfs1(vv,u);
- if(sz[vv]>hs[u])hs[u]=vv;
- sz[u]+=sz[vv];
- }
- }
- }
- void dfs2(int u,int tp){
- tid[u]=++idx,fid[idx]=u,top[u]=tp;
- if(hs[u])dfs2(hs[u],tp);
- for(int i=g[u];i;i=nxt[i]){
- int vv=v[i];
- if(vv!=fa[u]&&vv!=hs[u])dfs2(vv,vv);
- }
- }
- void up(__int64*a,int x,int y,int c,int k){
- int fx=top[x],fy=top[y];
- while(fx!=fy){
- if(dep[fx]>dep[fy])
- a[tid[fx]]+=c,a[tid[x]+]-=c,x=fa[fx],fx=top[x];
- else a[tid[fy]]+=c,a[tid[y]+]-=c,y=fa[fy],fy=top[y];
- }
- if(dep[x]>dep[y])x=x^y,y=x^y,x=x^y;
- a[tid[x]+k]+=c,a[tid[y]+]-=c;
- }
- int main(){
- scanf("%d",&t);
- while(t--){
- scanf("%d%d",&n,&m);
- F(i,,n)g[i]=;ed=;
- F(i,,n-)scanf("%d%d",egu+i,egv+i),adg(egu[i],egv[i]),adg(egv[i],egu[i]);
- dfs1(,),idx=,dfs2(,);
- F(i,,n)a[i]=,b[i]=;all=;
- while(m--){
- scanf("%s%d%d%d",op,&x,&y,&c);
- if(op[]=='')up(a,x,y,c,);
- else up(b,x,y,c,);
- }
- F(i,,n-)if(dep[egu[i]]>=dep[egv[i]])fid2[tid[egu[i]]]=i;
- else fid2[tid[egv[i]]]=i;
- F(i,,n)all+=a[i],ans1[fid[i]]=all;all=;
- F(i,,n)all+=b[i],ans2[fid2[i]]=all;
- printf("Case #%d:\n",ic++);
- F(i,,n)printf("%I64d%c",ans1[i],i==n?'\n':' ');
- F(i,,n-)printf("%I64d%c",ans2[i],(i==n-?'\n':' '));
- if(n==)puts("");//PE
- }
- return ;
- }
hdu_5044_Tree(树链剖分)的更多相关文章
- BZOJ 3626: [LNOI2014]LCA [树链剖分 离线|主席树]
3626: [LNOI2014]LCA Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2050 Solved: 817[Submit][Status ...
- BZOJ 1984: 月下“毛景树” [树链剖分 边权]
1984: 月下“毛景树” Time Limit: 20 Sec Memory Limit: 64 MBSubmit: 1728 Solved: 531[Submit][Status][Discu ...
- codevs 1228 苹果树 树链剖分讲解
题目:codevs 1228 苹果树 链接:http://codevs.cn/problem/1228/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...
- 并查集+树链剖分+线段树 HDOJ 5458 Stability(稳定性)
题目链接 题意: 有n个点m条边的无向图,有环还有重边,a到b的稳定性的定义是有多少条边,单独删去会使a和b不连通.有两种操作: 1. 删去a到b的一条边 2. 询问a到b的稳定性 思路: 首先删边考 ...
- 树链剖分+线段树 CF 593D Happy Tree Party(快乐树聚会)
题目链接 题意: 有n个点的一棵树,两种操作: 1. a到b的路径上,给一个y,对于路径上每一条边,进行操作,问最后的y: 2. 修改某个条边p的值为c 思路: 链上操作的问题,想树链剖分和LCT,对 ...
- 树链剖分+线段树 HDOJ 4897 Little Devil I(小恶魔)
题目链接 题意: 给定一棵树,每条边有黑白两种颜色,初始都是白色,现在有三种操作: 1 u v:u到v路径(最短)上的边都取成相反的颜色 2 u v:u到v路径上相邻的边都取成相反的颜色(相邻即仅有一 ...
- bzoj2243树链剖分+染色段数
终于做了一道不是一眼出思路的代码题(⊙o⊙) 之前没有接触过这种关于染色段数的题目(其实上课好像讲过),于是百度了一下(现在思维能力好弱) 实际上每一段有用的信息就是总共有几段和两段各是什么颜色,在开 ...
- bzoj3631树链剖分
虽然是水题1A的感觉太爽了O(∩_∩)O~ 题意相当于n-1次树上路径上每个点权值+1,最后问每个点的权值 本来想写线段树,写好了change打算框架打完了再来补,结果打完发现只是区间加和单点查 前缀 ...
- BZOJ 3531: [Sdoi2014]旅行 [树链剖分]
3531: [Sdoi2014]旅行 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1685 Solved: 751[Submit][Status] ...
随机推荐
- HTML,JS禁止鼠标右键、禁止全选、复制、粘贴的方法
禁止鼠标右键.禁止全选.复制.粘贴: oncontextmenu事件禁用右键菜单: js代码: document.oncontextmenu = function(){ event.returnVal ...
- 用VB把xlsx转换为xls
Sub Test()Dim wb As Workbook, mPath As String, f As StringApplication.DisplayAlerts = FalseApplicati ...
- MEAN全栈开发实践
- win10下安装Django
Django的核心(1.4+)可以运行在从2.5到2.7之间的任何Python版本. 我的电脑是操作系统是window10 ,内存是4G. 1.下载django 官网地址:https://www.dj ...
- 计算机网络课程优秀备考PPT之第二章物理层(二)
为了记录自己从2016.9~2017.1的<计算机网络>助教生涯,也为了及时梳理和整写笔记! 前期博客是, 计算机网络课程优秀备考PPT之第一章概述(一) 以上是<计算机网络> ...
- 友元(友元函数、友元类和友元成员函数) C++
有些情况下,允许特定的非成员函数访问一个类的私有成员,同时仍阻止一般的访问,这是很方便做到的.例如被重载的操作符,如输入或输出操作符,经常需要访问类的私有数据成员. 友元(frend)机制允许一个类将 ...
- 第七十八节,CSS3文本效果
CSS3文本效果 一.文本阴影 CSS3提供了text-shadow文本阴影效果,这个属性在之前讲过,只是没有涉及浏览器 支持情况. 浏览器支持情况 text-shadow Opera ...
- JS复习:第三章&第四章
第三章 一.把一个值转换成字符串的两种方法: 1.使用每个值都有的toString( )方法.这个方法唯一要做的就是返回相应值的字符串表现.例如: var age = 11 ; var ageAsSt ...
- ubuntu环境下docker安装步骤
本文是根据docker官方文档翻译,原文:https://docs.docker.com/engine/installation/linux/ubuntulinux/ Docker 支持以下 Ubun ...
- ES6 相关资料
Configuring Babel 6 Setting up ES6