求a站求哔哩哔哩邀请码码。给就采纳ಥ_ಥ

下次自动登录
现在的位置:
& 综合 & 正文
poj 3237 加强版 query on a tree
题意:一棵树,两种更新操作,改变一条边的边权,将a -&b路径上的所有边权取反,询问一条路径上的最大边权
都是典型的树链剖分,下面一题是上面的加强版,还要在树上进行成段更新,其实也不难。
只是区间还要再记录一个最小值,因为取反操作的话会使得区间的最大值和最小值互换。
然后就是树链剖分的老套路,如果是重链,在线段树中更新,否则直接改变边权。
线段树中下放懒惰标记的时候写漏了,调了许久,囧爆了。。。。
好像还可以用动态树实现吧,概念都看懂了,只是没实践过,改天去学了再贴上来吧
下面是这两题的,我的代码有点搓 - -,观看请慎重,以免伤了眼*_*
query on a tree
#include&cstdio&
#include&cstring&
#include&algorithm&
#define lson l,m,rt&&1
#define rson m+1,r,rt&&1|1
const int maxn = 20010;
const int inf = ~0u&&2;
int M[maxn&&2];
struct node{
int s,t,w,
}edge[maxn*2];
int size[maxn] , fa[maxn] , heavy[maxn] , head[maxn] , dep[maxn] , rev[maxn] , num[maxn] , cost[maxn];
inline void Max(int &x,int y){if(x&y) x=y;}
int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
void add_edge(int s,int t,int w)
edge[E].w=w;
edge[E].s=s;
edge[E].t=t;
edge[E].next=head[s];
head[s]=E++;
void dfs(int u,int f)
int mx=-1,e=-1;
size[u]=1;
for(int i=head[u];i!=-1;i=edge[i].next)
int v=edge[i].t;
dep[v]=dep[u]+1;
rev[v]=i^1;
size[u]+=size[v];
if(size[v]&mx)
mx=size[v];
heavy[u]=e;
fa[edge[e].t]=u;
inline void pushup(int rt){
M[rt]=max(M[rt&&1],M[rt&&1|1]);
void build(int l,int r,int rt){
int m=(l+r)&&1;
build(lson);
build(rson);
void update(int p,int val,int l,int r,int rt){
int m=(l+r)&&1;
if(p&=m) update(p,val,lson);
else update(p,val,rson);
pushup(rt);
int query(int L,int R,int l,int r,int rt){
if(L&=l&&r&=R){
return M[rt];
int m=(l+r)&&1;
int ret=0;
if(L&=m) ret=max(ret,query(L,R,lson));
if(R&m) ret=max(ret,query(L,R,rson));
void prepare()
build(1,n-1,1);
memset(num,-1,sizeof(num));
dep[0]=0;Seg_size=0;
for(int i=0;i&n;i++) fa[i]=i;
for(int i=0;i&n;i++)
if(heavy[i]==-1)
int pos=i;
while(pos && edge[heavy[edge[rev[pos]].t]].t == pos)
int t=rev[pos];
num[t]=num[t^1]=++Seg_
update(Seg_size,edge[t].w,1,n-1,1);
pos=edge[t].t;
void change(int edge_id,int val)
if(num[edge_id]==-1) edge[edge_id].w=edge[edge_id^1].w=
else update(num[edge_id],val,1,n-1,1);
int calc(int u,int lca)
int ans=-int vi=0;
while(u!=lca)
if(vi==10)
int r=rev[u];
if(num[r]==-1) Max(ans,edge[r].w),u=edge[r].t;
int p=fa[u];
if(dep[p] & dep[lca]) p=
int l=num[r];
int r=num[heavy[p]];
Max(ans,query(l,r,1,n-1,1));
int lca(int u,int v)
int a=find(u),b=find(v);
if(a==b) return dep[u] & dep[v] ? u ://a,b在同一条重链上
else if(dep[a]&=dep[b]) u=edge[rev[a]].t;
else v=edge[rev[b]].t;
int solve(int u,int v)
int p=lca(u,v);
return max(calc(u,p),calc(v,p));
int main()
int t,i,a,b,c;
scanf("%d",&t);
while(t--)
memset(head,-1,sizeof(head));
scanf("%d",&n);
for(i=0;i&n-1;i++)
scanf("%d%d%d",&a,&b,&c);a--;b--;
add_edge(a,b,c);
add_edge(b,a,c);
prepare();
char op[20];
while(scanf("%s",op)!=EOF && strcmp(op,"DONE"))
if(op[0]=='C')
scanf("%d%d",&a,&c);
change((a-1)*2,c);
scanf("%d%d",&a,&b);
printf("%d\n",solve(a-1,b-1));
CHANGE 1 3
#include&cstdio&
#include&cstring&
#include&algorithm&
#define lson l,m,rt&&1
#define rson m+1,r,rt&&1|1
const int maxn = 100010;
const int inf = ~0u&&2;
int M[maxn&&2];
int Mi[maxn&&2];
int col[maxn&&2];
struct node{
int s,t,w,
}edge[maxn*2];
int size[maxn] , fa[maxn] , heavy[maxn] , head[maxn] , dep[maxn] , rev[maxn] , num[maxn] , cost[maxn];
inline void Max(int &x,int y){if(x&y) x=y;}
inline int max(int a,int b){return a&b?a:b;}
inline int min(int a,int b){return a&b?b:a;}
int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
void add_edge(int s,int t,int w){
edge[E].w=w;
edge[E].s=s;
edge[E].t=t;
edge[E].next=head[s];
head[s]=E++;
void dfs(int u,int f){
int mx=-1,e=-1;
size[u]=1;
for(int i=head[u];i!=-1;i=edge[i].next){
int v=edge[i].t;
dep[v]=dep[u]+1;
rev[v]=i^1;
size[u]+=size[v];
if(size[v]&mx){
mx=size[v];
heavy[u]=e;
fa[edge[e].t]=u;
void build(int l,int r,int rt){
col[rt]=0;
int m=(l+r)&&1;
build(lson);
build(rson);
inline void pushup(int rt){
M[rt]=max(M[rt&&1],M[rt&&1|1]);
Mi[rt]=min(Mi[rt&&1],Mi[rt&&1|1]);
void make(int rt){
int tmp=Mi[rt];
Mi[rt]=-M[rt];
void pushdown(int rt){
if(col[rt]){
col[rt&&1]^=1;
make(rt&&1);
col[rt&&1|1]^=1;
make(rt&&1|1);
col[rt]=0;//很久没写线段树,连这个都忘了,囧
void update(int p,int val,int l,int r,int rt){
Mi[rt]=M[rt]=
pushdown(rt);
int m=(l+r)&&1;
if(p&=m) update(p,val,lson);
else update(p,val,rson);
pushup(rt);
void justdoit(int L,int R,int l,int r,int rt){
//printf("L=%d R=%d l=%d r=%d\n",L,R,l,r);
if(L&=l&&r&=R){
col[rt]^=1;
pushdown(rt);
int m=(l+r)&&1;
if(L&=m) justdoit(L,R,lson);
if(R&m) justdoit(L,R,rson);
pushup(rt);
int query(int L,int R,int l,int r,int rt){
if(L&=l&&r&=R){
return M[rt];
pushdown(rt);
int m=(l+r)&&1;
if(L&=m) ret=max(ret,query(L,R,lson));
if(R&m) ret=max(ret,query(L,R,rson));
void prepare(){
build(1,n-1,1);
memset(num,-1,sizeof(num));
dep[0]=0;Seg_size=0;
for(int i=0;i&n;i++) fa[i]=i;
for(int i=0;i&n;i++){
if(heavy[i]==-1) {
int pos=i;
while(pos && edge[heavy[edge[rev[pos]].t]].t == pos) {
int t=rev[pos];
num[t]=num[t^1]=++Seg_
update(Seg_size,edge[t].w,1,n-1,1);
pos=edge[t].t;
void change(int edge_id,int val){
if(num[edge_id]==-1) edge[edge_id].w=edge[edge_id^1].w=
else update(num[edge_id],val,1,n-1,1);
int calc(int u,int lca){
while(u!=lca){
int r=rev[u];
if(num[r]==-1) Max(ans,edge[r].w),u=edge[r].t;
int p=fa[u];
if(dep[p] & dep[lca]) p=
int l=num[r];
int r=num[heavy[p]];
Max(ans,query(l,r,1,n-1,1));
void gao(int u,int lca){
while(u!=lca){
int r=rev[u];
if(num[r]==-1) edge[r].w=edge[r^1].w=-edge[r].w,u=edge[r].t;
int p=fa[u];
if(dep[p] & dep[lca]) p=
int l=num[r];
int r=num[heavy[p]];
//printf("l=%d r=%d\n",l,r);
justdoit(l,r,1,n-1,1);
int lca(int u,int v){
int a=find(u),b=find(v);
if(a==b) return dep[u] & dep[v] ? u ://a,b在同一条重链上
else if(dep[a]&=dep[b]) u=edge[rev[a]].t;
else v=edge[rev[b]].t;
int solve(int u,int v){
int p=lca(u,v);
return max(calc(u,p),calc(v,p));
void sol(int u,int v){
int p=lca(u,v);//printf("p=%d\n",p);
gao(u,p);gao(v,p);
int main(){
int t,i,a,b,c;
scanf("%d",&t);
while(t--) {
memset(head,-1,sizeof(head));
scanf("%d",&n);
for(i=0;i&n-1;i++){
scanf("%d%d%d",&a,&b,&c);a--;b--;
add_edge(a,b,c);
add_edge(b,a,c);
prepare();
char op[20];
while(scanf("%s",op)!=EOF && strcmp(op,"DONE")){
if(op[0]=='C'){
scanf("%d%d",&a,&c);
change((a-1)*2,c);
else if(op[0]=='N'){
scanf("%d%d",&a,&b);
if(a==b) while(1);
sol(a-1,b-1);
scanf("%d%d",&a,&b);
if(a==b) while(1);
printf("%d\n",solve(a-1,b-1));
&&&&推荐文章:
【上篇】【下篇】热搜关键字:
> 硬件外设
> 华硕 VH242T-A和Eizo EV3237 对比
华硕 VH242T-A,
Eizo EV3237,求b站邀请码QAQ_百度知道
求b站邀请码QAQ
提问者采纳
由于活动期间12月1日关闭了邀请码注册 什么时候开启清楚现在注册唯一途径只有答题ಥ_ಥ
什么时候开启不清楚ಥ_ಥ没打出来
TAT还是谢谢了
ಥ_ಥ孩子乖 去答题吧。。。
ಥ_ಥ射射采纳
送你一个福利在搜索栏里搜索
复制题目粘贴就好
搜集了五分之一的答案
ಥ_ಥ不谢我是雷锋
谢谢红领巾
提问者评价
太给力了,你的回答完美地解决了我的问题,非常感谢!
其他类似问题
按默认排序
其他1条回答
jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="http://c,自己答题吧,随便蒙蒙就可以了<a href="http.hiphotos:///zhidao/wh%3D450%2C600/sign=96ead850a0cc7cd9fa783cdd0c310d09/09fa513d28a376b1fb./zhidao/pic/item/09fa513d28a376b1fb./zhidao/wh%3D600%2C800/sign=36b1c720c8ef91eed8ff4/09fa513d28a376b1fb.jpg" esrc="http://c邀请码暂时关闭购买,不好给啊
TAT答题好难,不过还是谢了
随便选选就好了,想当初我就是蒙了65分进去的啊
今天我蒙出了57分
多试几次,不会可以问度娘
邀请码的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁&&|&&责编:芦杉
  说到专业,日系的机器经常被提起。其中是众所周知的品牌,很多专业显示器用户对于艺卓都是津津乐道。近些年来,随着中国市场的不断发展,用户对于显示器的要求越来越高,专业产品已经不再是一小部分人的狂欢,越来越多的用户开始聚焦专业显示器。所以上个月艺卓推出的FlexScan&EV3237显示器引起了不小的关注。屌丝买不起&艺卓29999元4K液晶全球首测  关于艺卓的显示器的发展,很多人并不是特别了解,早在1997年艺卓就开始大批量的生产。从研制液晶显示器的历史来看,艺卓还是具有一定的资历的,毕竟1997年还是CRT显示器当道的时代,那时正值CRT向液晶过渡的阶段,可以说艺卓是第一批投入液晶怀抱的显示器厂商。不过有意思的是,艺卓并没有自己的面板厂,但是其却是世界顶级的专业显示器生产商,这得益于其驱动调教的优势。艺卓FlexScan&EV3237显示器  本次艺卓FlexScan&EV3237液晶显示器采用的是4K的面板,具有的分辨率,面板的尺寸为31.5英寸。这块面板来自,将高分辨率和广视角相结合,仅仅是这一点就比很多入门级别的4K显示器强出不少,当然这款显示器也支持60Hz,因此是完整意义上的高端4K显示器。产品类型4K显示器,LED显示器,广视角显示器产品定位设计制图屏幕尺寸31.5英寸屏幕比例16:9(宽屏)最佳分辨率面板类型IPS背光类型LED背光静态对比度1000:1亮度30000cd/㎡可视角度178/178°显示颜色16.7M控制方式按键语言菜单英文,德语,法语,意大利语,西班牙语,俄语,葡萄牙语,土耳其语,简体中文视频接口DVI-D,HDMI,Displayport×2机身颜色黑色底座功能侧转:344°倾斜:-5-35°升降:139mm保修政策全国联保,享受三包服务  上面我们说了,艺卓显示器的优势不仅仅是硬件的堆积。经过长期的合作,其的确在采购优质面板上,有自己的独特渠道,但是其后期的品控,驱动的优化,功能的创新也是有自己的独到之处。本次评测我们就将从硬件和软件两方面去评测FlexScan&EV3237,看看艺卓的新4K显示器到底有什么优势。  艺卓FlexScan&EV3237目前的报价是29999元,相比于一般4K显示器,其价格较为的昂贵。这种售价的信心到底来自于产品本身还是品牌的溢价,就让我们一同来鉴证吧。
...提示:支持键盘“← →”键翻页
屏幕尺寸 产品类型
硬件论坛精选
下载中关村在线Android 客户端
下载中关村在线 iPhone 客户端
下载中关村在线Windows8客户端
成为中关村在线微信好友
4¥30005¥12906¥18997¥7998¥10699¥95910¥2199求A站或B站邀请码!_百度知道
求A站或B站邀请码!
在线等,1 0 5 9 0 0 7 2 5 9 @ q q . c o m
这是一道待解决的难题
您的回答被采纳后将获得系统奖励20(财富值+经验值)+难题奖励10(财富值+经验值)+提问者悬赏15(财富值+经验值)
其他类似问题
邀请码的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 求个b站邀请码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信