题目链接:网络管理

  好久没写这种类型的题了……手都生了……

  一句话题意:树上带修改的路径\(k\)大数。这题面怎么有点眼熟

  显然树上的题目我们可以先在序列上考虑一下。区间带修改的区间\(k\)大数有两种做法(我只知道两种):一种是树套树,一种是整体二分。这道题感觉如果是树套树的话加到树上会很麻烦,于是就写了整体二分。(不过感觉好像CDQ分治啊

  序列问题和普通的整体二分没有什么区别,只是要注意一个修改操作需要拆成两个,一个操作是把原来的数删掉,下一个才是改为这个数。这样的话就可以保证一个元素的加入和删除永远会在分治时分进同一边,这样才可以保证正确性。到了树上,我们可以令$a_i$表示点$i$到根的路径上的权值,于是就可以求出$dfs$序后使用树状数组很方便的进行维护了。需要区间修改和单点查询,将原数组查分一下用树状数组维护即可。我会和你们说这道板子题我调了整整一天吗

  原谅我这篇博客不讲整体二分的入门

  入门的话我给附一个神犇lightgod的博客

  下面贴代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
#define maxn 80010
#define maxm 150010 using namespace std;
typedef long long llg; struct data{
int k,a,b,id,g;//-1表示减,0表示加
}s[maxm],zl[maxm],zr[maxm];
int n,m,le[maxn],ri[maxn],ls,d[maxm],ld,a[maxn];
int head[maxn],next[maxn<<1],to[maxn<<1],tt;
int fa[maxn],siz[maxn],top[maxn],son[maxn],dep[maxn];
int c[maxn],ans[maxn]; int getint(){
int w=0;bool q=0;
char c=getchar();
while((c>'9'||c<'0')&&c!='-') c=getchar();
if(c=='-') c=getchar(),q=1;
while(c>='0'&&c<='9') w=w*10+c-'0',c=getchar();
return q?-w:w;
} void link(int x,int y){
to[++tt]=y;next[tt]=head[x];head[x]=tt;
to[++tt]=x;next[tt]=head[y];head[y]=tt;
} void dfs(int u){
siz[u]=1; le[u]=++tt;
for(int i=head[u],v;v=to[i],i;i=next[i])
if(v!=fa[u]){
fa[v]=u; dfs(v); siz[u]+=siz[v];
if(siz[v]>siz[son[u]]) son[u]=v;
}
ri[u]=tt;
} void dfs(int u,int t){
top[u]=t; dep[u]=dep[fa[u]]+1;
if(son[u]) dfs(son[u],t);
for(int i=head[u],v;v=to[i],i;i=next[i])
if(!top[v]) dfs(v,v);
} void add(int x,int y){while(x<=n) c[x]+=y,x+=x&(-x);}
int sum(int x){
int t=0;
while(x) t+=c[x],x-=x&(-x);
return t;
} void solve(int top,int end,int l,int r){
if(l==r){
for(int i=top;i<=end;i++)
if(s[i].id) ans[s[i].id]=d[l];
return;
}
int mid=(l+r+1)>>1,lo(0),ro(0);
bool ll(0),rr(0);
for(int i=top,u,x;i<=end;i++){
if(s[i].k<=0){
if(s[i].b>=d[mid]){
u=s[i].a; zr[++ro]=s[i];
if(!s[i].k) add(le[u],1),add(ri[u]+1,-1);
else add(le[u],-1),add(ri[u]+1,1);
}
else zl[++lo]=s[i];
}
else{
x=sum(le[s[i].a])+sum(le[s[i].b]);
x-=sum(le[s[i].g])+sum(le[fa[s[i].g]]);
if(x>=s[i].k) zr[++ro]=s[i],rr=1;
else s[i].k-=x,zl[++lo]=s[i],ll=1;
}
}
for(int i=top,u;i<=end;i++)
if(s[i].k<=0 && s[i].b>=d[mid]){
u=s[i].a;
if(!s[i].k) add(le[u],-1),add(ri[u]+1,1);
else add(le[u],1),add(ri[u]+1,-1);
}
for(int i=1;i<=lo;i++) s[i+top-1]=zl[i];
for(int i=1;i<=ro;i++) s[i+top+lo-1]=zr[i];
if(ll) solve(top,top+lo-1,l,mid-1);
if(rr) solve(top+lo,end,mid,r);
} int lca(int u,int v){
while(top[u]!=top[v]){
if(dep[top[u]]<dep[top[v]]) swap(u,v);
u=fa[top[u]];
}
if(dep[u]<dep[v]) swap(u,v);
return v;
} int main(){
File("a");
n=getint(); m=getint(); ls=n;
for(int i=1;i<=n;i++){
s[i].k=0,s[i].a=i,s[i].b=getint();
d[++ld]=a[i]=s[i].b;
}
for(int i=1;i<n;i++) link(getint(),getint());
tt=0; dfs(1); dfs(1,1); tt=0;
for(int i=1;i<=m;i++){
s[++ls].k=getint(); s[ls].a=getint(); s[ls].b=getint();
if(s[ls].k){
s[ls].id=++tt; s[ls].g=lca(s[ls].a,s[ls].b);
if(dep[s[ls].a]+dep[s[ls].b]-2*dep[s[ls].g]+1<s[ls].k)
ans[tt]=-1,s[ls].id=0,ls--;
}
else{
ls++; s[ls]=s[ls-1]; s[ls-1].k=-1;
s[ls-1].b=a[s[ls].a]; a[s[ls].a]=s[ls].b;
d[++ld]=s[ls].b;
}
}
sort(d+1,d+ld+1); ld=unique(d+1,d+ld+1)-d-1;
solve(1,ls,1,ld);
for(int i=1;i<=tt;i++)
if(ans[i]==-1) printf("invalid request!\n");
else printf("%d\n",ans[i]);
return 0;
}

codevs 1490 【CTSC2008】 网络管理的更多相关文章

  1. BZOJ 1146: [CTSC2008]网络管理Network [树上带修改主席树]

    1146: [CTSC2008]网络管理Network Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 3522  Solved: 1041[Submi ...

  2. [BZOJ1146][CTSC2008]网络管理Network

    [BZOJ1146][CTSC2008]网络管理Network 试题描述 M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个 部门之间协同工作,公司搭建 ...

  3. BZOJ 1146: [CTSC2008]网络管理Network 树链剖分+线段树+平衡树

    1146: [CTSC2008]网络管理Network Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 870  Solved: 299[Submit] ...

  4. BZOJ 1146: [CTSC2008]网络管理Network( 树链剖分 + 树状数组套主席树 )

    树链剖分完就成了一道主席树裸题了, 每次树链剖分找出相应区间然后用BIT+(可持久化)权值线段树就可以完成计数. 但是空间问题很严重....在修改时不必要的就不要新建, 直接修改原来的..详见代码. ...

  5. Luogu4175:[CTSC2008]网络管理Network

    题面 Luogu4175:[CTSC2008]网络管理Network Sol 路径第\(k\)大 无解直接判断就好了 然后整体二分,加上树链剖分+树状数组统计 # include <bits/s ...

  6. BZOJ_1146_[CTSC2008]网络管理Network_主席树+树状数组

    BZOJ_1146_[CTSC2008]网络管理Network_主席树 Description M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个 部门 ...

  7. 【LG4175】[CTSC2008]网络管理

    [LG4175][CTSC2008]网络管理 题面 洛谷 题解 感觉就和普通的整体二分差不太多啊... 树上修改就按时间添加,用树状数组维护一下即可 代码 #include<iostream&g ...

  8. 洛谷 P4175 [CTSC2008]网络管理 解题报告

    P4175 [CTSC2008]网络管理 题目描述 带修改树上链的第\(k\)大 输入输出格式 输入格式: 第一行为两个整数\(N\)和\(Q\),分别表示路由器总数和询问的总数. 第二行有\(N\) ...

  9. 【BZOJ1146】[CTSC2008]网络管理Network 树状数组+DFS序+主席树

    [BZOJ1146][CTSC2008]网络管理Network Description M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个部门之间协同工 ...

  10. 洛谷P4175 - [CTSC2008]网络管理

    Portal Description 给出一棵\(n(n\leq8\times10^4)\)个点的带点权的树,进行\(m(m\leq8\times10^4)\)次操作,操作有两种: 修改一个点的点权. ...

随机推荐

  1. JQuery中ajax的相关方法总结

    前提条件 话说是jquery中的ajax方法,那么前提条件当然是引入jquery啦. <script src="http://libs.baidu.com/jquery/1.9.0/j ...

  2. 11.JAVA之GUI编程菜单

    功能:添加菜单组件 知识总结: 代码如下: import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Menu; impor ...

  3. Elasticsearch的CRUD:REST与Java API

    CRUD(Create, Retrieve, Update, Delete)是数据库系统的四种基本操作,分别表示创建.查询.更改.删除,俗称"增删改查".Elasticsearch ...

  4. 前端开发:css基础知识之盒模型以及浮动布局。

    前端开发:css基础知识之盒模型以及浮动布局 前言 楼主的蛮多朋友最近都在学习html5,他们都会问到同一个问题 浮动是什么东西?  为什么这个浮动没有效果?  这个问题楼主已经回答了n遍.今天则是把 ...

  5. 『.NET Core CLI工具文档』(十三)dotnet-publish

    说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正. 原文:dotnet-publish 翻译:dotnet-publish 名称 dotnet-publish - 打包应用程序及 ...

  6. Scala Macros - 元编程 Metaprogramming with Def Macros

    Scala Macros对scala函数库编程人员来说是一项不可或缺的编程工具,可以通过它来解决一些用普通编程或者类层次编程(type level programming)都无法解决的问题,这是因为S ...

  7. 你必须知道的Microsoft SQL Server一

    不知道为什么我Win10环境下安装的Sqlserver2012,智能提示的功能基本上没有用,没办法,我还是选择安装插件SQL Prompt 5吧.下载地址:http://www.uzzf.com/so ...

  8. [转] 评 WOW技能天赋设计

    本文转至:http://bbs.chinaunix.net/thread-1692302-8-1.html(只作转载, 不代表本站和博主同意文中观点或证实文中信息)再比如,传说中的面向对象本该大显神威 ...

  9. spider RPC框架的需求来源与特性介绍(一)

    spider RPC 特性介绍 spider RPC 性能测试 spider RPC 入门指南 spider RPC 配置文件参考 spider RPC 开发指南 spider RPC 安全性 spi ...

  10. Atitit java集成内嵌浏览器与外嵌浏览器attilax总结

    Atitit java集成内嵌浏览器与外嵌浏览器attilax总结 HTML5将颠覆原生App世界.这听起来有点危言耸听,但若认真分析HTML5的发展史,你会发现,这个世界的发展趋势确实就是这样. 熟 ...