BZOJ2851 : 极限满月

把集合A[i]看作i点的前驱点集合,建成一个DAG,并新建超级源S,向每个前驱集合为空的点连边,那么B[i]就是S到i的必经点集合。

首先使用Lengauer-Tarjan算法建立出以S为起点的Dominator Tree,那么B[i]就是i在树上的所有祖先。

对于一个询问,构造出虚树,然后统计虚树上每一条边上的点数,累加即可。

时间复杂度$O(n+m+q\log n)$。

#include<cstdio>
#include<algorithm>
using namespace std;
const int N=200010,M=500010;
int n,m,Q,i,x,q[N],a[N],vis[N],tot,t,ans;
int g1[N],g2[N],gd[N],v[M*3+N],nxt[M*3+N],ed;
int cnt,dfn[N],id[N],fa[N],f[N],mn[N],sd[N],idom[N];
int d[N],size[N],son[N],top[N],st[N],en[N];
inline void read(int&a){char c;while(!(((c=getchar())>=‘0‘)&&(c<=‘9‘)));a=c-‘0‘;while(((c=getchar())>=‘0‘)&&(c<=‘9‘))(a*=10)+=c-‘0‘;}
inline void add(int*g,int x,int y){v[++ed]=y;nxt[ed]=g[x];g[x]=ed;}
int F(int x){
  if(f[x]==x)return x;
  int y=F(f[x]);
  if(sd[mn[x]]>sd[mn[f[x]]])mn[x]=mn[f[x]];
  return f[x]=y;
}
void dfs(int x){
  id[dfn[x]=++cnt]=x;
  for(int i=g1[x];i;i=nxt[i])if(!dfn[v[i]])dfs(v[i]),fa[dfn[v[i]]]=dfn[x];
}
void tarjan(int S){
  int i,j,k,x;
  for(cnt=0,i=1;i<=n;i++)gd[i]=dfn[i]=id[i]=fa[i]=idom[i]=0,f[i]=sd[i]=mn[i]=i;
  dfs(S);
  for(i=n;i>1;i--){
    for(j=g2[id[i]];j;j=nxt[j])F(k=dfn[v[j]]),sd[i]=sd[i]<sd[mn[k]]?sd[i]:sd[mn[k]];
    add(gd,sd[i],i);
    for(j=gd[f[i]=x=fa[i]];j;j=nxt[j])F(k=v[j]),idom[k]=sd[mn[k]]<x?mn[k]:x;
    gd[x]=0;
  }
  for(i=2;i<=n;add(gd,idom[i],i),i++)if(idom[i]!=sd[i])idom[i]=idom[idom[i]];
}
void dfs1(int x){
  d[x]=d[idom[x]]+1,size[x]=1;
  for(int i=gd[x];i;i=nxt[i]){
    dfs1(v[i]),size[x]+=size[v[i]];
    if(size[v[i]]>size[son[x]])son[x]=v[i];
  }
}
void dfs2(int x,int y){
  top[x]=y;st[x]=++cnt;
  if(son[x])dfs2(son[x],y);
  for(int i=gd[x];i;i=nxt[i])if(v[i]!=son[x])dfs2(v[i],v[i]);
  en[x]=cnt;
}
inline int lca(int x,int y){
  for(;top[x]!=top[y];x=idom[top[x]])if(d[top[x]]<d[top[y]])swap(x,y);
  return d[x]<d[y]?x:y;
}
inline int cmp(int x,int y){return st[x]<st[y];}
int main(){
  for(read(n),n++,i=1;i<n;i++){
    read(m);
    if(!m)add(g1,n,i),add(g2,i,n);
    while(m--)read(x),add(g1,x,i),add(g2,i,x);
  }
  tarjan(n),cnt=0,dfs1(1),dfs2(1,1);
  for(read(Q);Q--;printf("%d\n",ans)){
    for(read(m),tot=i=0;i<m;i++){
      read(x);
      if(!vis[x=dfn[x]])vis[a[++tot]=x]=1;
    }
    vis[a[++tot]=1]=1;
    m=tot,sort(a+1,a+m+1,cmp);
    for(i=1;i<m;i++)if(!vis[x=lca(a[i],a[i+1])])vis[a[++tot]=x]=1;
    m=tot,sort(a+1,a+m+1,cmp);
    for(ans=0,q[t=1]=a[1],i=2;i<=m;q[++t]=a[i++]){
      while(st[a[i]]<st[q[t]]||en[a[i]]>en[q[t]])t--;
      ans+=d[a[i]]-d[q[t]];
    }
    for(i=1;i<=m;i++)vis[a[i]]=0;
  }
  return 0;
}

  

时间: 2024-11-18 02:34:28

BZOJ2851 : 极限满月的相关文章

挑战WORD极限排版之模板与加载项

........................待续 挑战WORD极限排版之模板与加载项,布布扣,bubuko.com

简单易学的机器学习算法——极限学习机(ELM)

极限学习机的概念 ELM是一种新型的快速学习算法,对于单隐层神经网络,ELM可以随机初始化输入权重和偏置并得到相应的输出权重. 对于一个单隐层神经网络,假设有N个任意的样本,其中, .对于一个有个隐层节点的单隐层神经网络可以表示为 其中,为激活函数,为输入权重, 为输出权重,是第个隐层单元的偏置. 单隐层神经网络的学习目标是使得输出的误差最小,可以表示为 即存在,和 ,使得 可以矩阵表述为. 其中,是隐层节点的输出,为输出权重,为期望输出. ,

一道极限题

证明: $$\lim_{n\to+\infty}\cos^{n}\left(\frac{1}{x}\right)dx=0$$ 证明:作变量替换 $u=\frac{1}{x}$, 则有\begin{align*}\int_{1}^{\infty}\left|\frac{\cos^{n}u}{u^{2}}\right| du&=\int_{1}^{\frac{\pi}{2}}\left|\frac{\cos^{n}u}{u^{2}}\right| du+\sum_{k=0}^{\infty}\int

《University Calculus》-chape8-无穷序列和无穷级数-基本极限恒等式

基于基本的极限分析方法(诸多的无穷小以及洛必达法则),我们能够得到推导出一些表面上看不是那么显然的式子,这些极限恒等式往往会在其他的推导过程中用到,其中一个例子就是概率论中的极限定理那部分知识.

iOS图片加载速度极限优化—FastImageCache解析

本文转载至 http://blog.cnbang.net/tech/2578/ FastImageCache是Path团队开发的一个开源库,用于提升图片的加载和渲染速度,让基于图片的列表滑动起来更顺畅,来看看它是怎么做的. 优化点 iOS从磁盘加载一张图片,使用UIImageVIew显示在屏幕上,需要经过以下步骤: 从磁盘拷贝数据到内核缓冲区 从内核缓冲区复制数据到用户空间 生成UIImageView,把图像数据赋值给UIImageView 如果图像数据为未解码的PNG/JPG,解码为位图数据

最大公约数之和——极限版II

P1490 - [UVa11426 ]最大公约数之和--极限版II Description Input 输入包含至多100组数据.每组数据占一行,包含正整数N(2<=N<=1<N<4000000).输入以N=0结束. Output 对于每组数据,输出一行,即所对应的G值.答案保证在64位带符号整数范围内. Sample Input 10 100 200000 0 Sample Output 67 13015 143295493160 Hint 数据范围: 对于30%的数据,2<

雷军成功七字真诀:专注、极致、口碑和快(做精品的同时,还强调性价比,做自己的极限,对用户的需求最快速响应,而不是急着出产品)

凤凰科技讯 5月17日消息,由凤凰网科技主办的<趋·势>沙龙第九期于5月12日举办,本期主题特邀国内知名天使投资人.现任小米科技创始人兼CEO雷军分享创业和投资经验.创新工场合伙人郎春晖主持了本次沙龙. 雷军表示,自己不是天才,成功的主要原因是遵循“专注.极致.口碑和快”这七字真诀.在他看来,做到这七字真诀,便是用互联网思维武装自己,做事就可事半功倍. 以下是雷军提出的七字真诀: 专注:少就是多.大道至简 我们所有人都在谈论苹果,谈论乔布斯,其实苹果和乔布斯给我们的第一个启发就是专注. 苹果已

极限优化:php巧用tcp长连接

极限优化:php巧用tcp长连接 提交 我的评论 加载中 已评论 极限优化:php巧用tcp长连接 2015-01-23 架构师之路 架构师之路 架构师之路 微信号 功能介绍 通往架构师之路,悠远而漫长,一路上,我们同行. 上一期,和大家分享了YouTube系统架构,本期将和大家分享一个大并发下php使用tcp长连接访问后端的优化方法. php巧用TCP长连接优化 一.面向人群如果你的站点架构满足以下几点,那么本文的优化方案会非常适合你:1)使用php等脚本语言作为开发语言2)需要连接后端服务,

[再寄小读者之数学篇](2014-06-20 求极限-H\&quot;older 不等式的应用)

设非负严格增加函数 $f$ 在区间 $[a,b]$ 上连续, 有积分中值定理, 对于每个 $p>0$ 存在唯一的 $x_p\in (a,b)$, 使 $$\bex f^p(x_p)=\cfrac{1}{b-a}\int_a^b f^p(t)\rd t. \eex$$ 试求 $\dps{\vlm{p}x_p}$. 解答: 由 H\"older 不等式, $$\beex \bea f^p(x_p)&=\cfrac{1}{b-a}\int_a^b f^p(t)\cdot 1\rd t\\