【bzoj】4538: [Hnoi2016]网络
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4538
维护一个数据结构支持对于一颗树的操作,需要支持:
1.对于树上的一条路径上的每个点上放一个值。
2.撤销某次操作的路劲放。
3.查询除了经过这个点的路径的最大值。
往一个路径上丢值相当于往不经过条路径的所有点上丢值。
用一个树链剖分即可维护,对于操作区间取反。
直接查询单点最大值即可。
为了维护单点最大值,线段树中的每一个点对应两个堆,用于维护插入誉删除。
防止爆空间,所以标记永久化即可。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<queue>
using namespace std;
#define maxn 400100
#define llg int
#define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
llg n,m,tail,deep[maxn],top[maxn],size[maxn],son[maxn],dad[maxn],id[maxn],dfsn,T,type;
vector<llg>a[maxn]; struct node
{
priority_queue<llg>q1,q2; void push1(llg x){ q1.push(x);}
void push2(llg x){ q2.push(x);} llg top()
{
llg anss=-;
while (!q2.empty() && (q2.top()==q1.top())) q1.pop(),q2.pop();
if (!q1.empty()) anss=q1.top();
return anss;
}
}val[maxn*]; struct data
{
llg l,r;
}dl[maxn]; struct data_
{
llg x,y,z;
}ask[maxn]; bool cmp(const data&a,const data&b) {return a.l<b.l;} void init()
{
llg x,y;
cin>>n>>m;
for (llg i=;i<n;i++)
{
scanf("%d%d",&x,&y);
a[x].push_back(y),a[y].push_back(x);
}
} void dfs_1(llg x,llg fa)
{
size[x]=;
llg w=a[x].size(),v;
for (llg i=;i<w;i++)
{
v=a[x][i];
if (v==fa) continue;
deep[v]=deep[x]+;
dfs_1(v,x);
dad[v]=x; size[x]+=size[v];
if (size[v]>size[son[x]]) son[x]=v;
}
} void dfs_2(llg x,llg fa)
{
id[x]=++dfsn;
if (son[x]) {top[son[x]]=top[x]; dfs_2(son[x],x);}
llg w=a[x].size(),v;
for (llg i=;i<w;i++)
{
v=a[x][i];
if (v==fa || v==son[x]) continue;
top[v]=v; dfs_2(v,x);
}
} void add(llg o,llg l,llg r,llg L,llg R,llg V)
{
if (l>=L && r<=R)
{
if (T) val[o].push1(V);
else val[o].push2(V);
return ;
}
llg lc=o<<,rc=o<<|,mid=(l+r)>>;
if (L<=mid) add(lc,l,mid,L,R,V);
if (R>mid) add(rc,mid+,r,L,R,V);
} void solve(llg x,llg y,llg V)
{
llg f1=top[x],f2=top[y];
tail=;
while (f1!=f2)
{
if (deep[f1]<deep[f2]) swap(x,y),swap(f1,f2);
dl[++tail].l=id[f1]; dl[tail].r=id[x];
x=dad[f1]; f1=top[x];
}
if (deep[x]<deep[y]) swap(x,y);
dl[++tail].l=id[y],dl[tail].r=id[x];
sort(dl+,dl+tail+,cmp);
llg l=,r,last=;
for (llg i=;i<=tail;i++)
{
l=last+; r=dl[i].l-;
if (l<=r) add(,,n,l,r,V);
last=dl[i].r;
}
l=last+; r=n;
if (l<=r) add(,,n,l,r,V);
} llg maxl_(llg o,llg l,llg r,llg wz)
{
llg ans=val[o].top();
if (l==r) return ans;
llg mid=(l+r)>>,lc=o<<,rc=o<<|;
if (wz<=mid) ans=max(ans,maxl_(lc,l,mid,wz));
if (wz>mid) ans=max(ans,maxl_(rc,mid+,r,wz));
return ans;
} int main()
{
yyj("a");
init();
dfs_1(,-);
top[]=;
dfs_2(,-);
for (llg o=;o<=m;o++)
{
scanf("%d",&type);
if (type==)
{
scanf("%d%d%d",&ask[o].x,&ask[o].y,&ask[o].z);
T=;
solve(ask[o].x,ask[o].y,ask[o].z);
}
if (type==)
{
llg x;
scanf("%d",&x);
T=;
solve(ask[x].x,ask[x].y,ask[x].z);
}
if (type==)
{
llg x;
scanf("%d",&x);
printf("%d\n",maxl_(,,n,id[x]));
}
}
return ;
}
【bzoj】4538: [Hnoi2016]网络的更多相关文章
- BZOJ 4538: [Hnoi2016]网络 [整体二分]
4538: [Hnoi2016]网络 题意:一棵树,支持添加一条u到v权值为k的路径,删除之前的一条路径,询问不经过点x的路径的最大权值 考虑二分 整体二分最大权值,如果\(k \in [mid+1, ...
- bzoj 4538: [Hnoi2016]网络
Description 一个简单的网络系统可以被描述成一棵无根树.每个节点为一个服务器.连接服务器与服务器的数据线则看做一条树边.两个服务器进行数据的交互时,数据会经过连接这两个服务器的路径上的所有服 ...
- 4538: [Hnoi2016]网络
4538: [Hnoi2016]网络 链接 分析: 整体二分. 对于一次操作,可以二分一个答案mid,判断权值大于mid的路径是否全部经过这个点.如果是 ,那么这次询问的答案在[l,mid-1]之间, ...
- 【LG3250】[HNOI2016]网络
[LG3250][HNOI2016]网络 题面 洛谷 题解 30pts 对于\(m\leq 2000\),直接判断一下这个个点是否断掉一个交互,没断掉的里面取\(max\)即可,复杂度\(O(m^2\ ...
- [HNOI2016]网络 树链剖分,堆
[HNOI2016]网络 LG传送门 表示乱搞比正解难想. 整体二分很好想吧. 但是为了好写快乐,我们选择三个\(\log\)的乱搞. 先树剖,线段树套堆维护区间最大值.对于一次修改,如果是插入,就把 ...
- 【BZOJ4538】[Hnoi2016]网络 整体二分+树状数组
[BZOJ4538][Hnoi2016]网络 Description 一个简单的网络系统可以被描述成一棵无根树.每个节点为一个服务器.连接服务器与服务器的数据线则看做一条树边.两个服务器进行数据的交互 ...
- Luogu-3250 [HNOI2016]网络
Luogu-3250 [HNOI2016]网络 题面 Luogu-3250 题解 CDQ分治...这个应该算是整体二分吧 二分重要度,按照时间从小到大加入大于重要度的边 对于一个询问,如果经过这个点的 ...
- 网络(bzoj 4538)
Description 一个简单的网络系统可以被描述成一棵无根树.每个节点为一个服务器.连接服务器与服务器的数据线则看做一条树边.两个服务器进行数据的交互时,数据会经过连接这两个服务器的路径上的所有服 ...
- (BZOJ4538)HNOI2016 网络
HNOI2016 Day1 T2 网络 Description 一个简单的网络系统可以被描述成一棵无根树.每个节点为一个服务器.连接服务器与服务器的数据线则看做一条树边.两个服务器进行数据的交互时,数 ...
随机推荐
- spring框架入门之一
一.什么是Spring框架 1.什么是Spring Spring框架是个一个全栈的框架.意思就是使用Spring的框架可以开发web层,service层还有dao层. 本质:Spring就是一个对象的 ...
- 详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂) v阅读目录
1楼留头头大神:http://www.cnblogs.com/toutou/p/4899388.html v阅读目录 v写在前面 v简单工厂模式 v工厂方法模式 v抽象工厂模式 v博客总结 v博客 ...
- python元组与购物车程序
#Author:zww ''' 程序:购物车程序 需求: 1.启动程序后,让用户输入工资,然后打印呢商品列表 2.允许用户根据商品编号购买商品 3.用户选择商品后,检测余额是否足够,够就直接扣款,不够 ...
- 【linux下多实例Tomcat+Nginx+redis+mysql环境搭建】
一.搭建环境之前最好自己先创建一个文件夹,再次文件夹下在创建文件夹来安放项目包和Tomcat等应用以及性能测试监控的文件 1.项目存放地址: mkdir export (创建一个文件),mkdir a ...
- iOS开发 -------- UITableView的编辑
一 核心API Class: UITableView Delegate: UITableViewDataSource, UITableViewDelegate 涉及到的API: 插入和删除 1 /** ...
- Oracle错误——SP2-0734: 未知的命令开头 "imp C##sin..." - 忽略了剩余的行。
错误 在windows的DOS窗口下使用命令导入Oracle数据. 原因 进入sqlplus里是不能执行imp的(sqlplus不认识imp),imp 是个工具,应该在cmd的dos命令提示符下执行.
- powershell脚本的格式化
Auto Formatting PowerShell in Visual Studio Code 1.安装visual studio code 2.安装powershell extension 3.打 ...
- ProgrammingError: You must not use 8-bit bytestrings...
问题出现: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit byte ...
- Cisco 2960交换机配置
一. 基本操作 Switch(config)#hostname test01(交换机名称) //全局模式下修改交换机名称 Switch(config)#enable secret 123456 //全 ...
- call继承父级属性,prototype继承父级方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...