这个题就不能链剖了,,必须老老实实用dfs序

dfs序真简单啊、、然而树上路径做多了似乎就只会链剖了

和正常树上距离一样,只不过搬到了主席树上、

然后加边就只要启发式合并即可、注意暴力重构

似乎能link更新的只有倍增lca啊,自己yy的链剖更新太扯没敢写

码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
#define N 20000005
int ans,siz[N],ch[N][2],last,f[100005][30],a,tot,rt[100005],x,y,top[100005],dui[100005],sz[100005],n,d[100005],fd[100005],laji,m,q,b;
char str[99];
vector<int>v[100005];
void up(int o)
{siz[o]=siz[ch[o][0]]+siz[ch[o][1]];
}
void jia(int o,int l,int r,int last)
{if(l==r){siz[o]=1;return;}int mid=(l+r)>>1;if(a<=mid){if(ch[o][0]==0)ch[o][0]=++tot;ch[o][1]=ch[last][1];jia(ch[o][0],l,mid,ch[last][0]);     }else{      if(ch[o][1]==0)ch[o][1]=++tot;ch[o][0]=ch[last][0];jia(ch[o][1],mid+1,r,ch[last][1]);}up(o);
}
void dfs(int o,int fa,int dis,int tap)
{top[o]=tap;if(rt[o]==0)rt[o]=++tot;a=dui[o];jia(rt[o],1,n,rt[fa]);d[o]=dis;sz[o]=1;f[o][0]=fa;int i;for(i=1;i<=16;i++)f[o][i]=f[f[o][i-1]][i-1]; for(i=0;i<v[o].size();i++){int nd=v[o][i];if(nd==fa)continue;dfs(nd,o,dis+1,tap);sz[o]+=sz[nd];                     }
}
struct la
{int id,v;
}s[100005];
bool cmp(la a,la b)
{return a.v<b.v;
}
int lca(int x,int y)
{int i;if(d[x]<d[y])swap(x,y);for(i=16;i>=0;i--){if(d[f[x][i]]>=d[y]){x=f[x][i];}}if(x==y)return x;for(i=16;i>=0;i--){if(f[x][i]!=f[y][i]){x=f[x][i];y=f[y][i];  }}return f[x][0];
}
void cha(int l,int r,int o1,int o2,int o3,int o4)
{if(l==r){ans=fd[l];return;}int mid=(l+r)>>1;if(siz[ch[o1][0]]+siz[ch[o2][0]]-siz[ch[o3][0]]-siz[ch[o4][0]]<a){a-=siz[ch[o1][0]]+siz[ch[o2][0]]-siz[ch[o3][0]]-siz[ch[o4][0]];cha(mid+1,r,ch[o1][1],ch[o2][1],ch[o3][1],ch[o4][1]);       }else{cha(l,mid,ch[o1][0],ch[o2][0],ch[o3][0],ch[o4][0]);       }
}
int main()
{ scanf("%d%d%d%d",&laji,&n,&m,&q);int i;for(i=1;i<=n;i++){scanf("%d",&s[i].v);s[i].id=i;}sort(s+1,s+1+n,cmp);for(i=1;i<=n;i++){dui[s[i].id]=i;  fd[i]=s[i].v;}for(i=1;i<=m;i++){scanf("%d%d",&a,&b);v[a].push_back(b);v[b].push_back(a);      }for(i=1;i<=n;i++){if(d[i]==0){dfs(i,0,1,i);}}while(q--){scanf("%s",str);if(str[0]=='Q'){scanf("%d%d%d",&x,&y,&a);x=x^ans;y=y^ans;a=a^ans;int lin=lca(x,y);cha(1,n,rt[x],rt[y],rt[lin],rt[f[lin][0]]);printf("%d\n",ans);}else{scanf("%d%d",&x,&y);x^=ans,y^=ans;if(sz[top[x]]>sz[top[y]])swap(x,y);v[y].push_back(x);v[x].push_back(y);dfs(x,y,d[y]+1,top[y]);      }}
}

2017.9.24 森林 失败总结相关推荐

  1. 找不到mfc140u.dll或者Microsoft Visual C++ 2017 Redistributable一直安装失败解决

    找不到mfc140u.dll 安装后提示这个问题,我将xshell卸载重新安装后发现安装过程中提示Microsoft Visual C++ 2017 Redistributable一直安装失败,所以问 ...

  2. 《麻省理工科技评论》:2018年18大科技趋势,2017年7大失败技术

    来源:科技周 摘要:2018 年伊始,许多科技大势仍在继续,正如比尔·盖茨所说,"大多数人高估了某种技术的短期价值,低估了其长期价值."同样,大多数的年度预测会高估了一年内一些事件 ...

  3. 微软常用运行库合集自动安装 2017.06.24 X86X64

    相信使用windows的小伙伴们都遇到过运行库报错的问题,尤其是使用绿色软件的时候,比如QQ和PS,由于在精简的时候把运行库精简掉了,所以难免会出现运行库报错.除了市面上的盗版ghost系统会内置运行 ...

  4. 成都市等市州2015《四川省工程量清单计价定额》人工费调整的批复〔2017〕24

    四川省建设工程造价管理总站 川建价发[2017]24号 四川省建设工程造价管理总站关于对成都市等15个市.州2015年<四川省建设工程工程量清单计价定额>人工费调整的批复 各有关市.州工程 ...

  5. 成都市等市、州2015年《工程量清单计价定额》人工费调整批复〔2017〕24

    四川省建设工程造价管理总站 川建价发[2017]24号 四川省建设工程造价管理总站 关于对成都市等15个市.州 2015年<四川省建设工程工程量清单计价定额> 人工费调整的批复 各有关市. ...

  6. 2017第24届中国国际汽车用品展览会会刊(参展商名录)

    2017第24届中国国际汽车用品展览会会刊(参展商名录) 展会名称: 2017第24届中国国际汽车用品展览会 所属展馆: 中国国际展览中心(新馆) 开展时间: 2017-02-17 至 02-20 参 ...

  7. 2017.10.24 学校食堂Dining 失败总结

    这题目描述不清啊.省选应该有人解释吧, 对着理解错的题调了一上午... 注意  如果一个人b==5 那这个人后面6个以后的都不能在这个人以前选 这个题就是怎么处理7的问题,状压枚举,同时满足条件的选人 ...

  8. 水库集,整理版,截止到 2017/4/24

    # No Title 1 1 水库羊年贺禧 ------ 毁三观,竖新生 #1 2 10 大道随行,不忘本心 #10 3 20 经济学 #20 4 30 无风险套利 #30 5 40 大纲的困扰 #4 ...

  9. 24安装失败 spss win10_教你win10系统显卡驱动安装失败的解决方法「系统天地」

    我们日常在对电脑的使用过程中,经常都会遇到这样或那样的问题.比如说win10系统显卡驱动安装失败该怎么办呢?别着急,还有小编在呢?接下来小编就来告诉大家win10电脑系统显卡驱动安装失败怎么解决. 详 ...

最新文章

  1. .md 文件的格式:写出好看的笔记
  2. 关于Pulsar与Kafka
  3. Python基本数据类型之整型
  4. PostgreSQL 10.1 手册_部分 III. 服务器管理_第 30 章 可靠性和预写式日志_30.5. WAL内部...
  5. 【网址收藏】WIN10下docker docker-compose docker-machine的安装与使用
  6. JavaEE PO VO BO DTO POJO DAO 整理总结
  7. 彼聆智能语音机器人_人工智能2.0时代,创造他们的究竟是谁?
  8. dom内容区域的滚动overflow,scroll
  9. SpringMVC 集成 mybatisPlus 分析
  10. 远程访问Linux之SSHputty
  11. iframe高度自适应的实现
  12. C++读写文件总结 .
  13. redis集群原理面试回答
  14. 2012 苹果第三代iPad3(NewPAD)发布会图文实录
  15. 51单片机蜂鸣器加数码管
  16. 步进电机 高速光耦_高速光耦有哪些_高速光耦如何选型 - 全文
  17. 字体变形html,SVG文字变形动画特效
  18. CESIUM例子学习(一)——动态模型加载
  19. moviepy第2天|对视频添加圆圈渐变大小的结尾及文字
  20. 如何Oracle_RAC恢复一个节点总结

热门文章

  1. mysql dba命令_mysql DBA:mysqladmin常用命令总结
  2. Android 数据访问之External Storage 数据保存在sd卡 demo+笔记
  3. html引入css webpack_深入剖析webpack——webpack 基础
  4. Python邻接矩阵邻接表转换
  5. M1芯片Mac使用原生brew安装软件速度过慢的解决办法
  6. WORD如何插入域编号?
  7. 【java基础知识】java.util.LinkedHashMap cannot be cast to com.XXX.XXX
  8. java中“53”个关键字(含2个保留字)
  9. MediaPlayer 的prepareAsync called in state 8 错误
  10. jQuery学习之五---效果