博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3779 : 重组病毒
阅读量:6279 次
发布时间:2019-06-22

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

一个点的感染时间为它到根路径上虚边数+1。

用Link-Cut Tree模拟虚实边切换,每次切换时等价于在一段或两段DFS序区间更新,线段树维护即可。

时间复杂度$O(n\log^2n)$。

 

#include
typedef long long ll;const int N=100010,M=262145;int n,m,i,x,y,root;int g[N],nxt[N<<1],v[N<<1],ed;int top[N],child[N],fa[N],d[N],size[N],st[N],en[N],dfn,seq[N];inline void addedge(int x,int y){v[++ed]=y;nxt[ed]=g[x];g[x]=ed;}inline void swap(int&a,int&b){int c=a;a=b;b=c;}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';}int tag[M];ll val[M];inline void add1(int x,int a,int b,int p){val[x]+=(ll)(b-a+1)*p;tag[x]+=p;}inline void pb(int x,int a,int b){ if(tag[x]){ int mid=(a+b)>>1; add1(x<<1,a,mid,tag[x]),add1(x<<1|1,mid+1,b,tag[x]),tag[x]=0; }}inline void up(int x){val[x]=val[x<<1]+val[x<<1|1];}void build(int x,int a,int b){ if(a==b){val[x]=seq[a];return;} int mid=(a+b)>>1; build(x<<1,a,mid),build(x<<1|1,mid+1,b),up(x);}void change(int x,int a,int b,int c,int d,int p){ if(c>d)return; if(c<=a&&b<=d){add1(x,a,b,p);return;} pb(x,a,b); int mid=(a+b)>>1; if(c<=mid)change(x<<1,a,mid,c,d,p); if(d>mid)change(x<<1|1,mid+1,b,c,d,p); up(x);}ll ask(int x,int a,int b,int c,int d){ if(c>d)return 0; if(c<=a&&b<=d)return val[x]; pb(x,a,b); int mid=(a+b)>>1;ll t=0; if(c<=mid)t=ask(x<<1,a,mid,c,d); if(d>mid)t+=ask(x<<1|1,mid+1,b,c,d); return up(x),t;}inline int lca2(int x,int y){ int t; while(top[x]!=top[y])t=top[x],x=fa[top[x]]; return x==y?t:child[y];}inline void subadd(int x,int p){ if(x==root){change(1,1,n,1,n,p);return;} if(st[x]>st[root]||en[x]
st[root]||en[x]
sizemax)sizemax=size[v[i]],heavy=v[i]; } if(heavy)child[x]=heavy;}void dfs2(int x,int pre,int t){ st[x]=++dfn;seq[dfn]=d[x];top[x]=t; if(child[x])dfs2(child[x],x,t); for(int i=g[x];i;i=nxt[i])if(v[i]!=pre&&v[i]!=child[x])dfs2(v[i],x,v[i]); en[x]=dfn;}char op[10];int main(){ read(n);read(m); for(i=1;i

  

转载地址:http://jpyva.baihongyu.com/

你可能感兴趣的文章
ARM想将芯片装进人类大脑 降低能耗是一大挑战
查看>>
Oracle数据库的备份方法
查看>>
Selenium 自动登录考勤系统
查看>>
关于如何以编程的方式执行TestNG
查看>>
智能照明造福千家万户 家居智能不再是梦
查看>>
物联网如何跳出“看起来很美”?
查看>>
浅谈MySQL 数据库性能优化
查看>>
《UNIX/Linux 系统管理技术手册(第四版)》——1.10 其他的权威文档
查看>>
灵动空间 创享生活
查看>>
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.6 UDP回射客户程序:dg_cli函数...
查看>>
不要将时间浪费到编写完美代码上
查看>>
《第一桶金怎么赚——淘宝开店创业致富一册通》一一第1章 创业梦想,怎样起步...
查看>>
基于容器服务的持续集成与云端交付(三)- 从零搭建持续交付系统
查看>>
《算法基础:打开算法之门》一3.4 归并排序
查看>>
高德开放平台开放源代码 鼓励开发者创新
查看>>
《高并发Oracle数据库系统的架构与设计》一2.5 索引维护
查看>>
《Exchange Server 2010 SP1/SP2管理实践》——2.4 部署外部网络环境
查看>>
Firefox 是 Pwn2own 2014 上攻陷次数最多的浏览器
查看>>
阿里感悟(十八)- 应届生Review
查看>>
《计算广告:互联网商业变现的市场与技术》一第一部分 在线广告市场与背景...
查看>>