传送门

唉蒟蒻又退化了,这道sb题居然做了20min,最后发现是updcovupdcovupdcov写成了updaddupdaddupdadd我还能说什么233233233

就是让你转边权为点权之后,支持树上路径覆盖,单点覆盖,路径加,求路径最大。

直接乱码一发居然AAA了?

贴代码了(稍微有点长):

#include<bits/stdc++.h>
#define lc (p<<1)
#define rc (p<<1|1)
#define mid (T[p].l+T[p].r>>1)
using namespace std;
inline int read(){
	int ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
const int N=1e5+5;
int n,m,first[N],top[N],dep[N],fa[N],siz[N],hson[N],pred[N],num[N],a[N],cnt=0,tot=0;
struct edge{int v,next,w;}e[N<<1];
inline void add(int u,int v,int w){e[++cnt].v=v,e[cnt].w=w,e[cnt].next=first[u],first[u]=cnt;}
void dfs1(int p){
	siz[p]=1;
	for(int i=first[p];i;i=e[i].next){
		int v=e[i].v;
		if(v==fa[p])continue;
		fa[v]=p,dep[v]=dep[p]+1,a[v]=e[i].w,dfs1(v),siz[p]+=siz[v];
		if(siz[v]>siz[hson[p]])hson[p]=v;
	}
}
void dfs2(int p,int tp){
	top[p]=tp,pred[num[p]=++tot]=p;
	if(!hson[p])return;
	dfs2(hson[p],tp);
	for(int i=first[p];i;i=e[i].next){
		int v=e[i].v;
		if(v!=fa[p]&&v!=hson[p])dfs2(v,v);
	}
}
struct Node{int l,r,mx,cov,add;}T[N<<2];
inline void pushup(int p){T[p].mx=max(T[lc].mx,T[rc].mx);}
inline void pushadd(int p,int v){T[p].mx+=v,T[p].add+=v;}
inline void pushcov(int p,int v){T[p].mx=v,T[p].cov=v,T[p].add=0;}
inline void pushdown(int p){
	if(~T[p].cov)pushcov(lc,T[p].cov),pushcov(rc,T[p].cov),T[p].cov=-1;
	if(T[p].add)pushadd(lc,T[p].add),pushadd(rc,T[p].add),T[p].add=0;
}
inline void build(int p,int l,int r){
	T[p].l=l,T[p].r=r,T[p].cov=-1;
	if(l==r){T[p].mx=a[pred[l]];return;}
	build(lc,l,mid),build(rc,mid+1,r),pushup(p);
}
inline void updadd(int p,int ql,int qr,int v){
	if(ql>T[p].r||qr<T[p].l)return;
	if(ql<=T[p].l&&T[p].r<=qr)return pushadd(p,v);
	pushdown(p);
	if(qr<=mid)updadd(lc,ql,qr,v);
	else if(ql>mid)updadd(rc,ql,qr,v);
	else updadd(lc,ql,mid,v),updadd(rc,mid+1,qr,v);
	pushup(p);
}
inline void updcov(int p,int ql,int qr,int v){
	if(ql>T[p].r||qr<T[p].l)return;
	if(ql<=T[p].l&&T[p].r<=qr)return pushcov(p,v);
	pushdown(p);
	if(qr<=mid)updcov(lc,ql,qr,v);
	else if(ql>mid)updcov(rc,ql,qr,v);
	else updcov(lc,ql,mid,v),updcov(rc,mid+1,qr,v);
	pushup(p);
}
inline int query(int p,int ql,int qr){
	if(ql>T[p].r||qr<T[p].l)return 0;
	if(ql<=T[p].l&&T[p].r<=qr)return T[p].mx;
	pushdown(p);
	if(qr<=mid)return query(lc,ql,qr);
	if(ql>mid)return query(rc,ql,qr);
	return max(query(lc,ql,mid),query(rc,mid+1,qr));
}
inline void changeadd(int x,int y,int v){
	while(top[x]^top[y]){
		if(dep[top[x]]<dep[top[y]])swap(x,y);
		updadd(1,num[top[x]],num[x],v),x=fa[top[x]];
	}
	if(dep[x]<dep[y])swap(x,y);
	updadd(1,num[y]+1,num[x],v);
}
inline void changecov(int x,int y,int v){
	while(top[x]^top[y]){
		if(dep[top[x]]<dep[top[y]])swap(x,y);
		updcov(1,num[top[x]],num[x],v),x=fa[top[x]];
	}
	if(dep[x]<dep[y])swap(x,y);
	updcov(1,num[y]+1,num[x],v);
}
inline int ask(int x,int y){
	int ret=0;
	while(top[x]^top[y]){
		if(dep[top[x]]<dep[top[y]])swap(x,y);
		ret=max(ret,query(1,num[top[x]],num[x])),x=fa[top[x]];
	}
	if(dep[x]<dep[y])swap(x,y);
	return max(ret,query(1,num[y]+1,num[x]));
}
int main(){
	n=read();
	for(int u,v,w,i=1;i<n;++i)u=read(),v=read(),w=read(),add(u,v,w),add(v,u,w);
	dfs1(1),dfs2(1,1),build(1,1,n);
	char s[10];
	while(1){
		scanf("%s",s);
		if(s[0]=='S')break;
		int x=read(),y=read();
		if(s[0]=='M')printf("%d\n",ask(x,y));
		if(s[0]=='C'&&s[1]=='o')changecov(x,y,read());
		if(s[0]=='A')changeadd(x,y,read());
		if(s[0]=='C'&&s[1]=='h'){
			int u=e[x*2].v,v=e[x*2-1].v;
			if(dep[u]>dep[v])swap(u,v);
			updcov(1,num[v],num[v],y);
		}
	}
	return 0;
}

2018.10.27 bzoj1984: 月下“毛景树”(树链剖分)的更多相关文章

  1. BZOJ1984: 月下“毛景树”

    1984: 月下“毛景树” Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 713  Solved: 245[Submit][Status] Descri ...

  2. [bzoj1984]月下“毛景树”

    Description 毛毛虫经过及时的变形,最终逃过的一劫,离开了菜妈的菜园.毛毛虫经过千山万水,历尽千辛万苦,最后来到了小小的绍兴一中的校园里.爬啊爬~爬啊爬~~毛毛虫爬到了一颗小小的" ...

  3. [BZOJ1984]月下“毛景树”解题报告|树链剖分

    Description 毛毛虫经过及时的变形,最终逃过的一劫,离开了菜妈的菜园. 毛毛虫经过千山万水,历尽千辛万苦,最后来到了小小的绍兴一中的校园里.爬啊爬~爬啊爬~~毛毛虫爬到了一颗小小的“毛景树” ...

  4. 【树链剖分】【分块】【最近公共祖先】【块状树】bzoj1984 月下“毛景树”

    裸题,但是因为权在边上,所以要先把边权放到这条边的子节点上,然后进行链更新/查询的时候不能更新/查询其lca. #include<cstdio> #include<cmath> ...

  5. 【BZOJ1984】月下“毛景树” 树链剖分+线段树

    [BZOJ1984]月下"毛景树" Description 毛毛虫经过及时的变形,最终逃过的一劫,离开了菜妈的菜园. 毛毛虫经过千山万水,历尽千辛万苦,最后来到了小小的绍兴一中的校 ...

  6. 【BZOJ-1984】月下“毛景树” 树链剖分

    1984: 月下“毛景树” Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 1314  Solved: 416[Submit][Status][Discu ...

  7. 树剖+线段树||树链剖分||BZOJ1984||Luogu4315||月下“毛景树”

    题面:月下“毛景树” 题解:是道很裸的树剖,但处理的细节有点多(其实是自己线段树没学好).用一个Dfs把边权下移到点权,用E数组记录哪些边被用到了:前三个更新的操作都可以合并起来,可以发现a到b节点间 ...

  8. BZOJ 1984: 月下“毛景树” [树链剖分 边权]

    1984: 月下“毛景树” Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 1728  Solved: 531[Submit][Status][Discu ...

  9. Bzoj 1984: 月下“毛景树” 树链剖分

    1984: 月下“毛景树” Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 1282  Solved: 410[Submit][Status][Discu ...

随机推荐

  1. JETTY+NGINX

    一.Jetty搭建 1)上传jetty.tar,并且解压(支持war和文件夹) [root@localhost home]# tar -xvf jetty.tar [root@localhost ho ...

  2. 在CentOS7.4上手动编译安装Mysql-5.7.20

    实验环境:CentOS 7.4 mysql软件: mysql-boost-5.7.20.tar.gz 1.安装编译工具 yum -y install \ncurses \ncurses-devel \ ...

  3. Repeater绑定数据 后台自定义的DataTable

    前台:<asp:Repeater ID="Repeater1" runat="server">            <ItemTemplat ...

  4. XML 解析技术

    xml 解析方式有两种: dom 解析和 sax 解析: 针对着两种解析方式,有三种解析器: sun公司的 jaxp dom4j 组织的 dom4j jdom 组织的 jdom dom 解析XML : ...

  5. PHP系统编程--PHP进程信号处理(转)

    原地址:https://www.cnblogs.com/linzhenjie/p/5485436.html PHP的pcntl扩展提供了信号处理的功能,利用它可以让PHP来接管信号的处理,在开发服务器 ...

  6. rbac 权限分配, 基于formset实现,批量增加

    这里需要两个知识点: - formset - 自动发现项目中的URL1. 什么是formset: Django中 form组件 或 ModelForm组件,用于做一个表单的验证. 接收前端form表单 ...

  7. 在pom.xml中引入jar包坐标的依赖范围

    A依赖B,需要在A的pom.xml文件中添加B的坐标,添加坐标时需要指定依赖范围,依赖范围包括: compile:编译范围,指A在编译时依赖B,此范围为默认依赖范围.编译范围的依赖会用在编译.测试.运 ...

  8. Struts2框架的数据封装一之属性封装(属性封装的第一种方式:对参数进行封装)

    request带着参数来,aciton对其进行处理.在学习action之前,使用的是servlet对request进行处理.request请求时会带有参数,所以我们要对这些参数进行封装. 1. 为什么 ...

  9. Bootstrap 框架 day57

    Bootstrap框架  Bootstrap介绍 Bootstrap是Twitter开源的基于HTML.CSS.JavaScript的前端框架. 它是为实现快速开发Web应用程序而设计的一套前端工具包 ...

  10. laravel中类似于thinkPHP中trace功能

    答案来自https://segmentfault.com/q/1010000007716945 一楼: 到 https://packagist.org 上搜索你想要的关键词,比如查debugbar 列 ...