博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P2495 [SDOI2011]消耗战
阅读量:6958 次
发布时间:2019-06-27

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

思路

虚树上DP

虚树相当于一颗包含了所有询问的关键点信息的树,包含的所有点只有询问点和它们的LCA,所以点数是\(2k\)级别的,这样的话复杂度就是\(O(\sum k)\),复杂度就对了

虚树重点就是虚树的构造
用栈可以进行虚树的构造
过程如下

设现在加入点u

如果栈为空或只有一个元素,直接加入即可(延长当前链)
如果LCA(u,S[top])=S[top],把u加入即可(延长树链)
否则证明u和S中的树链在lca的两个子树中,在dfn[lca]<=dfn[S[top-1]]的条件下,从S[top-1]向S[top]连边,然后弹出
如果最后lca=S[top],证明这颗子树构造完成,加入u即可
否则证明lca在S[top-1]和S[top]之间,从lca向S[top]连边,然后pop出S[top],lca入栈
最后把u加入即可

这题建出虚树之后就直接DP就好了

如果u不是关键点

\(DP[u]=\sum_{v\in son[u]} min(minx[v],DP[v])\)
如果u是关键点
\(DP[u]=minx[u]\)

minx[u]是断开1到u路径的最小代价

代码

#include 
#include
#include
#include
#include
#define int long longusing namespace std;const int MAXN = 250010;int n,m;struct Graph{ vector
to[MAXN],wx[MAXN]; void addedge(int ui,int vi,int wi){ to[ui].push_back(vi); wx[ui].push_back(wi); }}G1,G2;int S[MAXN],topx,dfn[MAXN],dfs_clock,fa[MAXN][20],dep[MAXN],minx[MAXN],mark[MAXN];void dfs1(int u,int f){ dep[u]=dep[f]+1; dfn[u]=++dfs_clock; fa[u][0]=f; for(int i=1;i<20;i++) fa[u][i]=fa[fa[u][i-1]][i-1]; for(int i=0;i
=0;i--) if(dep[fa[x][i]]>=dep[y]) x=fa[x][i]; if(x==y) return x; for(int i=19;i>=0;i--) if(fa[x][i]!=fa[y][i]) x=fa[x][i],y=fa[y][i]; return fa[x][0];}bool cmp(int a,int b){ return dfn[a]
1&&dfn[Lca]<=dfn[S[topx-1]]){ G2.addedge(S[topx-1],S[topx],0); topx--; } if(Lca!=S[topx]){ G2.addedge(Lca,S[topx],0); S[topx]=Lca; } S[++topx]=u;}int dfs2(int u){ int ans=0; for(int i=0;i
im;signed main(){ scanf("%lld",&n); for(int i=1;i
0){ G2.addedge(S[topx-1],S[topx],0); topx--; } printf("%lld\n",dfs2(1)); } return 0;}

转载于:https://www.cnblogs.com/dreagonm/p/10748892.html

你可能感兴趣的文章
源码阅读:AFNetworking(十五)——UIRefreshControl+AFNetworking
查看>>
从GCD到NSOperation之NSOperation
查看>>
Kubernetes API server工作原理
查看>>
NSHashTable 和 NSMapTable
查看>>
关于js继承的想法笔记
查看>>
O3(OzoneWalletIOS)项目
查看>>
V4L2视频输入框架概述
查看>>
ubuntu 16.04下docker的安装
查看>>
web页面渲染(一)
查看>>
roadhog+dva中环境变量的配置
查看>>
js解决0.1+0.2==0.3的问题的几种方法
查看>>
微服务实战:从架构到发布(二)
查看>>
你的微博也被盗赞?试试HSTS强制HTTPS加密
查看>>
java中具有继承关系的类及其对象初始化顺序
查看>>
CountDownLatch的await和countDown方法简单分析
查看>>
javascript的promise
查看>>
Gulp和webpack的区别
查看>>
那些被忽略的 JavaScript 数组方法细节
查看>>
7天玩转机器学习
查看>>
javascript身份证号码校验
查看>>