洛谷P3250 网络 [HNOI2016] 整体二分
正解:整体二分+树状数组
解题报告:
亲这里的建议是用整体二分呢
dbq最近看sd淘宝说话体看多了有点脑抽,,,
首先考虑如果是单组询问怎么做昂QAQ
考虑二分答案
对于所有比mid小的操作都不用管
然后对于大于mid的操作,他们都是不应该存在的
怎么样就不会存在呢,那不然就是已经结束了不然就是经过了故障点嘛
所以如果能通过某种方式算出所有麻油结束的经过了故障点的链数就可以判断是否合法了嘛
然后这个其实是个比较典型的dfn序套路题,,,?
就是对每个修改就改链的两端+1(-1),两端的lca-1(+1),lca的父亲-1(+1)
然后查询经过点x的链有几条就相当于是查询x的子树中的权值和
( 然后这个套路我本来还想解释一下的,,,后来发现麻油什么好解释的昂QAQ
就理解成差分就好,然后为什么是lca-1,lca父亲-1,是为了保证lca处答案的正确性
感性理解趴,,,这个我也不能很好的解释,但是画个图还是不难理解的w
显然如果经过x的链的条数=大于mid的链且没有结束的条数说明枚举大了,ans在[l,mid]中
否则ans在[mid+1,r]中
然后看到多组询问什么的可以想到,整体二分
就依然是整体二分的经典套路昂,具体内部实现就和单组询问的思想是一样的
然后放下代码就over辣!
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define rg register
#define gc getchar()
#define ll long long
#define t(i) edge[i].to
#define lowbit(x) (x&(-x))
#define rp(i,x,y) for(rg ll i=x;i<=y;++i)
#define my(i,x,y) for(rg ll i=x;i>=y;--i)
#define e(i,x) for(rg ll i=head[x];i;i=edge[i].nxt) const ll N=1e5+,M=2e5+,inf=1e9;
ll n,m,head[N],edge_cnt,dfn[N],dfn_cnt,sz[N],tr[N],as[N],fa[N][],dep[N];
bool output[M];
struct ed{ll to,nxt;}edge[N<<];
struct node{ll op,fr,to,lca1,lca2,val,id;}opr[M],l[M],r[M]; il ll read()
{
rg char ch=gc;rg ll x=;rg bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il void ad(ll x,ll y){edge[++edge_cnt]=(ed){x,head[y]};head[y]=edge_cnt;}
il void dfs(ll x,ll fat){dep[x]=dep[fat]+;dfn[x]=++dfn_cnt;sz[x]=;fa[x][]=fat;rp(i,,)fa[x][i]=fa[fa[x][i-]][i-];e(i,x)if(t(i)^fat)dfs(t(i),x),sz[x]+=sz[t(i)];}
il ll lca(ll x,ll y)
{
if(dep[x]<dep[y])swap(x,y);
my(i,,)if(dep[fa[x][i]]>=dep[y])x=fa[x][i];
if(x==y)return x;
my(i,,)if(fa[x][i]!=fa[y][i])x=fa[x][i],y=fa[y][i];
return fa[x][];
}
il void updat(ll x,ll dat){if(!x)return;while(x<=n)tr[x]+=dat,x+=lowbit(x);}
il ll query(ll x){/*printf("x=%lld ",x);*/ll ret=;while(x)ret+=tr[x],x-=lowbit(x);/*printf("ret=%lld\n",ret);*/return ret;}
il void solv(ll op_l,ll op_r,ll as_l,ll as_r)
{
// printf("op_l=%lld op_r=%lld as_l=%lld as_r=%lld\n",op_l,op_r,as_l,as_r);
if(op_l>op_r)return;if(as_l==as_r){rp(i,op_l,op_r)as[opr[i].id]=as_l;return;}
ll mid=(as_l+as_r)>>,l_cnt=,r_cnt=,bg_cnt=;
rp(i,op_l,op_r)
{
// printf(" i=%lld op=%lld to=%lld\n",i,opr[i].op,opr[i].to); if(opr[i].op==){if(query(dfn[opr[i].to]+sz[opr[i].to]-)-query(dfn[opr[i].to]-)==bg_cnt)l[++l_cnt]=opr[i];else r[++r_cnt]=opr[i];continue;}
if(opr[i].op==)
{
if(opr[i].val<=mid){l[++l_cnt]=opr[i];/*printf("qwq?\n");*/continue;}
else{updat(opr[i].fr,-);updat(opr[i].to,-);updat(opr[i].lca1,);updat(opr[i].lca2,);--bg_cnt;r[++r_cnt]=opr[i];}
// if(!(opr[i].val<=mid))
// printf("QAQ val=%lld mid=%lld\n",opr[i].val,mid);
continue;
}
if(opr[i].val<=mid){l[++l_cnt]=opr[i];/*printf("qwq???\n");*/continue;}
else{updat(opr[i].fr,);updat(opr[i].to,);updat(opr[i].lca1,-);updat(opr[i].lca2,-);++bg_cnt;r[++r_cnt]=opr[i];}
// printf("QAQ val=%lld mid=%lld\n",opr[i].val,mid);
}
rp(i,op_l,op_r)
{
if(opr[i].op== && opr[i].val>mid){updat(opr[i].fr,);updat(opr[i].to,);updat(opr[i].lca1,-);updat(opr[i].lca2,-);}
if(opr[i].op== && opr[i].val>mid){updat(opr[i].fr,-);updat(opr[i].to,-);updat(opr[i].lca1,);updat(opr[i].lca2,);}
}
// printf("QAQ l_cnt=%lld\n",l_cnt);
rp(i,,l_cnt)opr[op_l+i-]=l[i];rp(i,,r_cnt)opr[op_l+l_cnt+i-]=r[i];
solv(op_l,op_l+l_cnt-,as_l,mid);solv(op_l+l_cnt,op_r,mid+,as_r);
} int main()
{
// freopen("wl.in","r",stdin);freopen("wl.out","w",stdout);
n=read();m=read();memset(as,-,sizeof(as));rp(i,,n-){ll x=read(),y=read();ad(x,y);ad(y,x);}dfs(,);
rp(i,,m)
{
// printf("i=%lld\n",i);
ll tmp=read()+;
if(tmp==)
{
ll fr_tmp=read(),to_tmp=read(),lca_tmp=lca(fr_tmp,to_tmp),val_tmp=read();opr[i]=(node){,dfn[fr_tmp],dfn[to_tmp],dfn[lca_tmp],dfn[fa[lca_tmp][]],val_tmp,i};
}
if(tmp==){opr[i]=opr[read()];opr[i].op=;opr[i].id=i;}
if(tmp==){opr[i].op=;opr[i].id=i;opr[i].to=read();output[i]=;}
// printf("i=%lld to=%lld\n",i,opr[i].to);
}
// printf("QAQ?\n");
solv(,m,-,inf);rp(i,,m)if(output[i])printf("%lld\n",as[i]);
return ;
}
好久麻油打整体二分我开始差点忘记树状数组要清零了1551
洛谷P3250 网络 [HNOI2016] 整体二分的更多相关文章
- 洛谷P3527 MET-Meteors [POI2011] 整体二分
正解:整体二分 解题报告: 传送门! 还有个双倍经验!(明明是一样的题目为什么你们一个紫一个黑啊喂! 这题首先要想到可以二分嘛,然后看到多组询问肯定就整体二分鸭 那就是基本套路啊,发现是区间修改单点查 ...
- 洛谷P3527 [POI2011]MET-Meteors [整体二分]
题目传送门 Meteors 格式难调,题面就不妨放了. 分析: 一道整体二分的练手题. 就是一般的整体二分的套路,但是要注意,将修改和询问加入队列的时候要先加修改再加询问.另外,博主代码打得太丑,常数 ...
- 洛谷$P2617\ Dynamic\ Rankings$ 整体二分
正解:整体二分 解题报告: 传送门$w$ 阿查询带修区间第$k$小不显然整体二分板子呗,,, 就考虑先按时间戳排序(,,,其实并不需要读入的时候就按着时间戳排的鸭$QwQ$ 每次二分出$mid$先把所 ...
- 洛谷P3250 [HNOI2016]网络(整体二分+树状数组+树剖)
传送门 据说正解是树剖套堆???然而代码看着稍微有那么一点点长…… 考虑一下整体二分,设当前二分到的答案为$mid$,如果所有大于$mid$的边都经过当前点$x$,那么此时$x$的答案必定小于等于$m ...
- [CodePlus 2017 11月赛&洛谷P4058]木材 题解(二分答案)
[CodePlus 2017 11月赛&洛谷P4058]木材 Description 有 n棵树,初始时每棵树的高度为 Hi ,第 i棵树每月都会长高 Ai.现在有个木料长度总量为 S的订单, ...
- 洛谷 P1083 借教室【二分+差分/线段树】
二分mid,然后用1~mid的操作在差分序列上加减,最后把差分序列前缀和起来,看是否有有超过初始r值的 #include<iostream> #include<cstdio> ...
- 洛谷P1462-通往奥格瑞玛的道路-二分+最短路
洛谷P1462-通往奥格瑞玛的道路 题目描述 在艾泽拉斯,有\(n\)个城市.编号为\(1,2,3,...,n\). 城市之间有\(m\)条双向的公路,连接着两个城市,从某个城市到另一个城市,会遭到联 ...
- LOJ 2555 & 洛谷 P4602 [CTSC2018]混合果汁(二分+主席树)
LOJ 题目链接 & 洛谷题目链接 题意:商店里有 \(n\) 杯果汁,第 \(i\) 杯果汁有美味度 \(d_i\),单价为 \(p_i\) 元/升.最多可以添加 \(l_i\) 升.有 \ ...
- [洛谷P3250][HNOI2016]网络
题目大意:给定一棵树.有三种操作: $0\;u\;v\;t:$在$u$到$v$的链上进行重要度为$t$的数据传输. $1\;x:$结束第$x$个数据传输. $2\;x:$询问不经过点$x$的数据传输中 ...
随机推荐
- [Linux] 设置系统时区
1. 检查当前时区 以 root 身份登录. # date Fri Sep :: UTC 其中 UTC 是指当前使用的时间系统为世界标准时间,也称世界协调时间.英文名称为 Coordinated Un ...
- Puppet报错汇总
报错1: 解决:该报错是由于Puppet agent 的时间和Puppet master的时间不一致导致,可以使用ntp同步一下时间即可解决 报错2: 启动mcollective的时候报错 解决:ge ...
- Go学习笔记(二)搭建Visual Studio Code调试环境
上一篇 Go学习笔记(一)安装Go语言环境 安装Visual Studio Code 这是目前我觉得最好用的文本编辑器了, https://code.visualstudio.com/ 中间有几部确认 ...
- 通过USB转TTL串口下载stm32程序
目录: 1.硬件及其接线 2.驱动及软件 3.下载程序测试 1.硬件及其接线 1.1 USB转TTL刷机板(CH340模块升级小板) 1.2 主芯片STM32F103C8T6开发板 1.3接线 1.3 ...
- textarea 标签 属性
textarea 标签 resize: vertical; 禁止横向拉伸 x resize: horizontal; 禁止竖向拉伸 y resize: none; 去掉拖动按钮
- ERP项目实施记录06
自上月20以后,因厂里赶货,办公室人员有空也要去车间帮手,ERP的事就没动静了. 2014年1月10日开了个小组会议,认为第三方不是专业做本行业的,开发风险大:因此希望先开发一个报价软件试试. 明天第 ...
- Invalid file name: must contain only [a-z0-9_.]【Android报错】
Invalid file name: must contain only [a-z0-9_.][Android报错] 如: `[2012-02-07 09:58:14 - EmergencyRespo ...
- svn checkout 指定目录(转)
http://www.uqugu.com/blog/article/svn-checkout-specified-forder/ svn有时只想检出指定目录,对于其他的大文件目录则不想检出,如不想检出 ...
- Ubuntu设置DNS永久生效
环境查看 设置临时生效,修改配置文件/etc/resolv.conf nameserver 202.96.134.133 重启失效 设置永久生效,修改网卡配置文件/etc/network/interf ...
- db lock
1.锁的基本概念和功能 所谓锁(Lock),实际上是加在数据库.表空间.表.行或者数据页上的一种标记,用户在对各种数据库对象进行读取或者写入操作时首先要看该对象上的锁是否允许其进行相应操作.从允许用户 ...