博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LOJ2553]暴力写挂
阅读量:5796 次
发布时间:2019-06-18

本文共 2102 字,大约阅读时间需要 7 分钟。

锟题x2

以下用$a\rightarrow b$表示端点为$a,b$的链

把式子写成$(h_1(x)+h_1(y)-h_1(lca))-h_2(lca')$,第一部分就是$x\rightarrow rt$和$y\rightarrow rt$的并的总长

考虑对第一棵树边分治,假设分治到$(u,v)$,我们想要统计所有跨过$(u,v)$的$x\rightarrow y$

设在树$1$上$fa_v=u$,对于$u$这边的点$x$,令$f_x=-\infty,g_x=dis(x,u\rightarrow rt)$,对$v$这边的点$y$,令$f_y=h_1(y),g_y=-\infty$,那么$h_1(x)+h_1(y)-h_1(lca)=g_x+f_y$(将另外的$f,g$设为$-\infty$是为了防止统计到不跨过$(u,v)$的情况)

所以我们可以将当前分治范围内的点拿出来在树$2$上建虚树,在虚树上统计答案即可

最后不要忘了统计$x=y$的答案...

#include
#include
#include
using namespace std;typedef long long ll;const int inf=2147483647;const ll linf=922337203685477580ll;int n;struct pr{ int to,v; pr(int a=0,int b=0){to=a;v=b;}};struct tree1{ int h[733340],nex[1466670],to[1466670],v[1466670],M; vector
g[366670]; void ins(int a,int b,int c){ M++; to[M]=b; v[M]=c; nex[M]=h[a]; h[a]=M; } void add(int a,int b,int c){ ins(a,b,c); ins(b,a,c); } int N; void dfs(int fa,int x){ vector
::iterator it; int p=0; for(it=g[x].begin();it!=g[x].end();it++){ if(it->to!=fa){ if(p){ N++; add(p,N,0); add(N,it->to,it->v); p=N; }else{ add(x,it->to,it->v); p=x; } } } for(it=g[x].begin();it!=g[x].end();it++){ if(it->to!=fa)dfs(x,it->to); } } ll dis[733340]; int fa[733340],dep[733340]; void dfs(int x){ dep[x]=dep[fa[x]]+1; for(int i=h[x];i;i=nex[i]){ if(to[i]!=fa[x]){ fa[to[i]]=x; dis[to[i]]=dis[x]+v[i]; dfs(to[i]); } } } void gao(){ int i,x,y,z; for(i=1;i
dfn[y])swap(x,y); return query(dfn[x],dfn[y]); } void gao(){ int i,j,x,y,z; for(i=1;i
>1]+1; }}t2;bool cmp(int x,int y){return t2.dfn[x]
1&&t2.dep[st[tp-1]]>t2.dep[l]){ vt.add(st[tp-1],st[tp]); tp--; } if(t2.dep[st[tp]]>t2.dep[l]){ vt.add(l,st[tp]); tp--; } if(t2.dep[st[tp]]
t1.dep[y])swap(x,y); build(); vt.clear(st[1]); dfs3(0,x,0); dfs4(0,y); vt.dfs(st[1]); solve(x); solve(y);}int main(){ scanf("%d",&n); t1.gao(); t2.gao(); ans=-linf; solve(1); for(int i=1;i<=n;i++)ans=max(ans,t1.dis[i]-t2.dis[i]); printf("%lld",ans);}

转载于:https://www.cnblogs.com/jefflyy/p/9642432.html

你可能感兴趣的文章
分享:Backbone.js 样例站点与入门指南
查看>>
图的基本算法
查看>>
HTML基础(一)
查看>>
boost.circular_buffer简介
查看>>
Database Appliance并非Mini版的Exadata-还原真实的Oracle Unbreakable Database Appliance
查看>>
网页图片缩放(js)
查看>>
如何用Fiddler对Android应用进行抓包
查看>>
iOS为所需要的视图添加模糊效果--UIVisualEffectView
查看>>
HDU-1222 Wolf and Rabbit (欧几里得定理)
查看>>
Camera Calibration 相机标定:原理简介(五)
查看>>
ehcache实例
查看>>
python 匿名函数
查看>>
javascript实现-------------选择排序
查看>>
centOS中VMware Tools 安装
查看>>
oracle中以dba_、user_、v$_、all_、session_、index_开头的常...
查看>>
leetcode 116- Populating Next Right Pointers in Each Node
查看>>
spring项目启动错误——java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext...
查看>>
iOS开发网络篇—GET请求和POST请求
查看>>
字典dict
查看>>
游戏名词解释
查看>>