bzoj4538: [Hnoi2016]网络

Latex | IEEE双栏排版中长公式的排版 IEEE双栏排版中,有时候公式过于长了,过宽,导致单栏排版不下。 阅读详情

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4538

思路:首先二分答案K

那么对于每个询问我们只要判断权值大于K的路径的交是否都过x即可

路径的交还是路径,路径交满足结合律

可以离线拿个线段树维护一下即可,以权值为关键字,每个点记录该段区间的路径交

也可以用splay来做

二分时在线段树上二分即可。

如果lca用倍增求,复杂度是O(nlog^2n)

链交好像写的比较丑.....又是一波讨论

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
const int maxn=200010,maxm=200010,maxk=22;
using namespace std;
struct quer{int op,t,x,pos;}q[maxn];
int n,m,pw[maxk],lg[300010],cnt,dep[maxn],tot;

struct Tgraph{
	int pre[maxm],now[maxn],son[maxm],tot,fa[maxn][maxk],dfn[maxn],last[maxn],tim;
	void add(int a,int b){pre[++tot]=now[a],now[a]=tot,son[tot]=b;}
	void ins(int a,int b){add(a,b),add(b,a);}
	void dfs(int x){
		dfn[x]=++tim;
		for (int i=1;i<=18;i++) fa[x][i]=fa[fa[x][i-1]][i-1];
		for (int y=now[x];y;y=pre[y]) if (son[y]!=fa[x][0])
			fa[son[y]][0]=x,dep[son[y]]=dep[x]+1,dfs(son[y]);
		last[x]=tim;
	}
	int lca(int x,int y){
		if (dep[x]<dep[y]) swap(x,y);
		for (int i=0,h=dep[x]-dep[y];h;i++) if (pw[i]&h) h-=pw[i],x=fa[x][i];
		if (x==y) return x;
		for (int i=lg[dep[x]];i>=0;i--) if (fa[x][i]!=fa[y][i]) x=fa[x][i],y=fa[y][i];
		return fa[x][0];
	}
	inline bool in(int x,int y){return dfn[x]>=dfn[y]&&dfn[x]<=last[y];}//判断x是否在y的子树里
}g;

struct chain{
	int u,v,lca;
	bool in(int x){//判断x是否在链上
		if (!lca) return 1;
		if (lca>0) return g.in(x,lca)&&(g.in(u,x)||g.in(v,x));
		return 0;
	}
	void print(){printf("u=%d v=%d lca=%d\n",u,v,lca);}
};
struct data{
	chain ch;int id,v;
	void init(int i){scanf("%d%d%d",&ch.u,&ch.v,&v),ch.lca=g.lca(ch.u,ch.v),id=i;}
	void print(){ch.print(),printf("id=%d val=%d\n",id,v);}
}seq[maxn];

bool cmp(data a,data b){return a.v<b.v;}

chain merge(chain a,chain b){
	if (!a.lca) return b;//0是这个路径已被删去,-1是交集为空
	if (!b.lca) return a;
	if (a.lca==-1||b.lca==-1) return (chain){0,0,-1};
	if (dep[a.lca]<dep[b.lca]) swap(a,b);
	if (!b.in(a.lca)) return (chain){0,0,-1};
	int lcau=g.lca(a.u,b.u),lcav=g.lca(a.v,b.v);
	int newu=dep[lcau]>dep[a.lca]?lcau:a.lca;
	int newv=dep[lcav]>dep[a.lca]?lcav:a.lca;
	return (chain){newu,newv,a.lca};
}

struct Tsegment{
	#define ls (p<<1)
	#define rs (p<<1|1)
	#define mid ((l+r)>>1)
	chain t[maxn<<2];
	void update(int p){t[p]=merge(t[ls],t[rs]);}
	void modify(int p,int l,int r,int x,chain ch){
		if (l==r){t[p]=ch;return;}
		if (x<=mid) modify(ls,l,mid,x,ch);
		else modify(rs,mid+1,r,x,ch);
		update(p);
	}
	int query(int p,int l,int r,int x){
		if (l==r) return seq[l].v;
		if (t[rs].in(x)) return query(ls,l,mid,x);
		else return query(rs,mid+1,r,x);
	}
}T;

int query(int x){
	if (!tot) return -1;
	chain ch=T.t[1];
	if (ch.in(x)) return -1;
	return T.query(1,1,cnt,x);
}

int main(){
	scanf("%d%d",&n,&m),pw[0]=1,lg[1]=0;
	for (int i=1;i<=18;i++){
		pw[i]=pw[i-1]<<1;
		for (int j=pw[i-1]+1;j<=pw[i];j++) lg[j]=i;
	}
	for (int i=1,x,y;i<n;i++) scanf("%d%d",&x,&y),g.ins(x,y);
	g.dfs(1);
	for (int i=1;i<=m;i++){
		scanf("%d",&q[i].op);
		if (q[i].op==0) seq[++cnt].init(i);
		else if (q[i].op==1) scanf("%d",&q[i].t);
		else scanf("%d",&q[i].x);
	}
	sort(seq+1,seq+1+cnt,cmp);
	for (int i=1;i<=cnt;i++) q[seq[i].id].pos=i;
	for (int i=1;i<=m;i++){
		if (q[i].op==0) T.modify(1,1,cnt,q[i].pos,seq[q[i].pos].ch),tot++;
		else if (q[i].op==1) T.modify(1,1,cnt,q[q[i].t].pos,(chain){0,0,0}),tot--;
		else printf("%d\n",query(q[i].x));
	}
	return 0;
}


突发E层(Es层):短波通信中的“意外惊喜”与“隐形杀手”全解析 本文深入解析了突发E层(Es层)在短波通信中的双重作用,既可能带来超远距离通信的“意外惊喜”,也可能成为通信链路的“隐形杀手”。通过分析Es层的形成机制、时空分布规律及实战应用技巧,帮助通信爱好者与专业人员更好地利用或应对这一电离层现象,提升短波通信的可靠性与效率。 阅读详情

相关推荐

二相混合式步进电机闭环矢量控制simulink仿真(含仿真文件)

在位置跟踪伺服系统中二相混合式步进电机闭环矢量控制simulink仿真

qq_39023633的博客 2万+

「HNOI2016」网络(整体二分,树状数组)

Description 给定一棵树,要求支持一下操作 选定一条路径,并给定一个权值。 取消选定一条路径。 求未经过节点uuu的路径中,权值最大的那一个。 n⩽105,m⩽2×105n⩽105,m⩽2×105n \leqslant 10^5, m \leqslant 2\times 10^5 Solution 网上有许多线段树+堆的做法,但是查询时都递归到了底层,这不是暴力吗??(不过...

DSL_HN_2002的博客 515

基于Xilinx Artix7 的FPGA高级应用 (二):千兆以太网通信(实战篇)第一期

本项目是基于Xlinx Artix7 XC7A35T芯片 以太网芯片选用的是RTL8211EG PHY芯片 MAC 和PHY接口标准是GMII 开发工具是vivado 2018.3 我们先来复习一下以太网的基本通信原理: 当我们的计算机需要与局域网中另外的设备进行通信的时候,需要将数据传输到网卡进行编码,然后传输到线上,经过另一个设备的网卡解码成该设备能读取的数据。 关于以太网协议的知识在原理篇中已经讲过,不再重复,下面直接看接收代码: 首先注意我们的MAC和PHY通信选择的是GMII接口标准,发送数据一

工大技术底层人员的博客 4033

HNOI2016网络(整体二分+树状数组)

题目链接 题目大意 给定一棵树,每次有三种事件。 1.设定一条路径u→vu\rightarrow vu→v的权值为aaa。 2.删除某条设定。 3.询问所有存在的设定中,不经过xxx路径的权值最大值是多少。 n≤105,m≤2×105n\le 10^5,m\le 2\times 10^5n≤105,m≤2×105。 题解 刚开始只想到一个O(nlog3n)O(nlog^3n)O(nlog3n)的树...

WAautomaton的博客 387

IMU卡尔曼滤波方法详细介绍

本文介绍了基于IMU和卡尔曼滤波的状态估计方法。系统采用9维状态向量(位置、速度、加速度计零偏),通过牛顿运动学建立状态方程,并利用外部位置观测进行校正。详细推导了状态转移矩阵和控制输入矩阵的形式,阐述了预测和更新的计算步骤。同时说明了过程噪声Q和观测噪声R的设置原则,其中Q反映模型不确定性,R取决于传感器精度。该方法可有效融合IMU测量与外部观测数据,实现位置、速度和偏置的联合估计。

haing2019的博客 757

《信息化项目文档模板十二——业务需求新增/变更审批确认表 》

系列文章目录 《信息化项目文档模板一——项目需求说明书》 《信息化项目文档模板二——项目启动会文档模板》 《信息化项目文档模板三——会议纪要模板》 《信息化项目文档模板四——系统项目蓝图设计模板》 《信息化项目文档模板五——系统详细设计模板》 《信息化项目文档模板六——系统详细设计模板》 《信息化项目文档模板七——系统开发计划模板》 《信息化项目文档模板八——系统功能测试模板》 《信息化项目文档模板九——系统压力测试模板》 《信息化项目文档模板十——系统推广上线计划模板》 《信息化项目文档模板十一——系统用

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 1712

bzoj 4538: [Hnoi2016]网络

线段树套堆

fyc的博客 319

JavaSwing_1.1: FlowLayout(流式布局)

FlowLayout,流式布局管理器。按水平方向依次排列放置组件,排满一行,换下一行继续排列。

谢TS的博客 7万+

【LG3250】[HNOI2016]网络

【LG3250】[HNOI2016]网络 题面 洛谷 题解 30pts 对于\(m\leq 2000\),直接判断一下这个个点是否断掉一个交互,没断掉的里面取\(max\)即可,复杂度\(O(m^2\log n)\)。 另20pts 对于无删除操作的,用线段树维护, 我们将一条路径的补集全部打上那条路径重要度的标记,这样我们断一条边时直接单点查询即可。 据说这样子再改改可以变成一种树剖加...

176

【C语言】一文搞懂C语言文件操作

读写文件、文件相关库函数详解、文件缓冲区介绍

StackFrame 5657

【常见开源库的二次开发】基于openssl的加密与解密——openssl认识与配置(一)

OpenSSL 是一个开源的软件库,它提供了一系列加密工具和协议,主要用于实现安全通信,如在网络上的数据传输。它支持多种加密算法,包括对称加密、非对称加密、散列函数、伪随机数生成器、数字签名、密钥交换以及证书管理等。

嵌入式技术开发 4161

P3250 [HNOI2016] 网络 (树剖 + 线段树维护堆)

题目链接: P3250 [HNOI2016] 网络 大致题意 给定一棵有nnn个节点的树, 有mmm次如下操作: 0 a b c 表示在(a,b)(a, b)(a,b)的最短路径上增加一条重要度为ccc的边. 1 t 表示删除第ttt次操作所增加的边 2 x 表示节点xxx出现故障. 此时需要回答, 所有不经过xxx节点的边中最大的重要度. 解题思路 首先我们考虑查询操作, 我们需要每次对删除节点x后的连通路径上的最大边权. 但本题我们可以把边权直接等价变为点权. 因此可以把查询操作变成查询最大点权. 进

Fau的博客 572

【PINN物理信息网络】基于PINN物理信息网络求解圆柱坐标中的热方程(python)

【PINN物理信息网络】基于PINN物理信息网络求解圆柱坐标中的热方程(python)

k8291121的博客 2273

bzoj 4538: [Hnoi2016]网络 树链剖分

显然,题目等价于带插入删除的,求不覆盖某一点的所有链的重要度的最大值。        如果求覆盖某一点的所有链的重要度最大值,那么插入时显然可以树链剖分之后在对应的线段树区间中加入这个重要度。因为要删除和求最大值,套一个优先队列即可。        现在要求不覆盖某一点,那么插入的时候就修改所有除了该链之外的所有点。树链剖分之后得到logN个序列区间,那么补集也是logN的,线段树打标记即可。

lych的博客 1700

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

bzoj4538: [Hnoi2016]网络 整体二分 差分 树状数组

bzoj4538: [Hnoi2016]网络 题目传送门 分析 二分最大值呗。 相当于把所有大于这个值的路径筛出来啦。 链修改,点查询-&gt;点修改,子树查询。 就是u,v+1u,v+1u,v+1,lca,fa[lca]−1lca,fa[lca]-1lca,fa[lca]−1 判断某那个点是否经过当前所有链即可。 整体二分上一下即可。 代码 #include&lt;bits/stdc++.h&g...

maxtir的博客 271

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

bzoj4538:[Hnoi2016]网络

传送门 已经极其接近的想到过正确做法了,但是没想到标记永久化,所以复杂度炸了 树链剖分,对于线段树每个节点开个堆(一开始用multiset,结果MLE了,想不通为什么) 考虑对于一次请求\(u,v\),只有当它的路径上的点坏掉的时候,它才会受到影响,所以除去这条路径上的所有点都应该有这个贡献 代码: #include<cstdio> #include<iostream> #...

weixin_30439031的博客 141

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

BZOJ4538: [Hnoi2016]网络

BZOJ4538: [Hnoi2016]网络 Description 一个简单的网络系统可以被描述成一棵无根树。每个节点为一个服务器。 连接服务器与服务器的数据线则看做一条树边。 两个服务器进行数据的交互时,数据会经过连接这两个服务器的路径上的所有服务器(包括这两个服务器自身)。 由于这条路径是唯一的,当路径上的某个服务器出现故障,无法正常运行时,数据便无法交互。 此外,每个数据交...

weixin_30955341的博客 60

【BZOJ4538 : [Hnoi2016]网络】树链剖分+线段树+堆

BZOJ4538 中文题意 做法 用线段树节点维护该不经过该线段的最大值 那么你就用两个堆 插入的时候插入到第一个堆 删除的时候加入到第二个堆 每次我们查询就是第一个堆堆首如果和第二个堆堆首相同 就pop 否则查第一个 树链剖分找重儿子写>一直MLE到怀疑人生 看了下discuss 发现oier们说要写 >= 真是为oier水深火热环境堪忧 /* if you can't se...

我是谁 --- 卡比兽 186

BZOJ 4538: [Hnoi2016]网络

4538: [Hnoi2016]网络 Time Limit:20 SecMemory Limit:128 MBSubmit:1165Solved:430[Submit][Status][Discuss] Description   一个简单的网络系统可以被描述成一棵无根树。每个节点为一个服务器。连接服务器与服务器的数据线则看做一条树边。两个服务器进行数据的交...

weixin_30477797的博客 81

Bzoj4538:[Hnoi2016]网络:整体二分+树状数组

题目链接:4538:[Hnoi2016]网络 整体二分,用dfs序+树状数组判断当前答案是否可行 对于一段区间[l,r],我们二分得到的答案为mid,我们把[l,r]中大于mid的数据交互请求加入树状数组,同时也有撤销操作的删除 这样知道我们发现了一个询问操作,我们在树状数组中做子树查询,就可以知道当前点坏掉会影响多少条数据交互请求 设区间[l,r]中我们在当前操作的时候还存在有num个数

蜜の夜明け 1195

bzoj4538: [HNOI2016]网络

题目链接维护一颗树。在每个时刻,有以下三个操作。 (u,v,w)(u,v,w): 向从uu至vv的路径上添加一个重要度为ww的任务。 (t)(t): 取消tt时刻添加的任务。 (x)(x) 查询所有未覆盖xx节点的任务中重要度的最大值。 这道题有诸多做法,然而我直接当做树链剖分练习题来做了。对于这样的三个操作,我们可以考虑用树剖来维护。查询不覆盖某节点的任务难以直接用线段树实现,我们可以反其道而行之

DorikoTY的博客 461

bzoj4538: [Hnoi2016]网络(树链剖分)

传送门 树链剖分一眼题。 题意简述: 给定一棵树,有三种操作: 加入一条路径 删除一条已加入的路径 询问不过一个点x的路径的最大值。 思路: 直接树链剖分维护答案。 因为询问的事不过点xxx的最大值,因此对于一条路径我们只需要修改它的补集。 考虑到树上一条到根节点的路径映射到序列上只有logloglog段,因此它的补集也只有logloglog段,这样就可以修改了。 然后有了一种叫做删除的操作...

苟为蒟蒻又何妨 286

BZOJ4538 : [Hnoi2016]网络

求出这棵树的dfs序,对于一条链$u-v$,假设$st[u]\leq st[v]$,那么一条链不经过点$x$当且仅当它满足下面任意一个条件: 1.$st[v]&lt;st[x]$ 2.$st[u]&gt;en[x]$ 3.$st[x]&lt;st[lca(u,v)]\leq en[x]$ 4.$st[u]&lt;st[x],st[v]&gt;en[x]$ 前3种情况可以通过线段树做到$O...

weixin_33725807的博客 95
上一篇: bzoj4537: [Hnoi2016]最小公倍数
下一篇: bzoj4540: [Hnoi2016]序列
thy_asdf
博客等级 码龄12年 16粉丝 186原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值