思路:

这不是LCT裸题嘛23333

(好像并查集+按秩合并就可以搞了 我还是too young)

维护边权的话 就新加一个点 代表边 这个点想线段的两个端点连边就好了

  1. //By SiriusRen
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. const int N=;
  5. int n,m,op,xx,yy,top,lastans,T;
  6. int fa[N],ch[N][],q[N],maxx[N],rev[N],v[N],f[N];
  7. bool isroot(int x){return ch[fa[x]][]!=x&&ch[fa[x]][]!=x;}
  8. void push_up(int x){maxx[x]=max(v[x],max(maxx[ch[x][]],maxx[ch[x][]]));}
  9. void push_down(int x){if(rev[x])rev[ch[x][]]^=,rev[ch[x][]]^=,rev[x]=,swap(ch[x][],ch[x][]);}
  10. void rotate(int p){
  11. int q=fa[p],y=fa[q],x=(ch[q][]==p);
  12. ch[q][x]=ch[p][!x],fa[ch[q][x]]=q;
  13. ch[p][!x]=q,fa[p]=y;
  14. if(!isroot(q)){
  15. if(ch[y][]==q)ch[y][]=p;
  16. if(ch[y][]==q)ch[y][]=p;
  17. }fa[q]=p,push_up(q);
  18. }
  19. void splay(int x){
  20. q[++top]=x;
  21. for(int i=x;!isroot(i);i=fa[i])q[++top]=fa[i];
  22. while(top)push_down(q[top]),top--;
  23. for(int y=fa[x];!isroot(x);rotate(x),y=fa[x])if(!isroot(y)){
  24. if((ch[y][]==x)^(ch[fa[y]][]==y))rotate(x);
  25. else rotate(y);
  26. }push_up(x);
  27. }
  28. void access(int x){for(int t=;x;t=x,x=fa[x])splay(x),ch[x][]=t,push_up(x);}
  29. void makeroot(int x){access(x),splay(x),rev[x]^=;}
  30. void link(int x,int y){makeroot(x),fa[x]=y;}
  31. void split(int x,int y){makeroot(x),access(y),splay(y);}
  32. int find(int x){return x==f[x]?x:f[x]=find(f[x]);}
  33. int main(){
  34. scanf("%d%d",&n,&m);
  35. for(int i=;i<=n;i++)f[i]=i;
  36. for(int i=;i<=m;i++){
  37. scanf("%d%d%d",&op,&xx,&yy);
  38. xx^=lastans,yy^=lastans;
  39. if(op){
  40. int fx=find(xx),fy=find(yy);
  41. if(fx!=fy)printf("%d\n",lastans=);
  42. else split(xx,yy),printf("%d\n",lastans=maxx[yy]);
  43. }
  44. else{
  45. T++;
  46. int fx=find(xx),fy=find(yy);
  47. if(fx!=fy){
  48. f[fx]=fy,v[n+T]=maxx[n+T]=T;
  49. link(xx,n+T),link(n+T,yy);
  50. }
  51. }
  52. }
  53. }

2017.6.9 Upd

这竟然是考试题     不会并查集做法GG了....

明明复杂度一样还要卡   这究竟是道德的沦丧还是人性的缺失。

  1. //By SiriusRen
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. const int N=;
  5. int op,n,m,u,v,l,T,s[N],f[N],w[N],vis[N],ans[N],vv;
  6. int main(){
  7. scanf("%d%d",&n,&m);
  8. for(int i=;i<=n;i++)s[i]=;
  9. while(m--){
  10. scanf("%d%d%d",&op,&u,&v),u^=l,v^=l;
  11. if(op){
  12. vv++,ans[u]=w[u],ans[v]=w[v];bool flg=;
  13. for(int lu=;u;lu=u,u=f[u])ans[u]=max(w[lu],ans[lu]),vis[u]=vv;
  14. for(int lv=;v;lv=v,v=f[v])if(vis[v]==vv){
  15. printf("%d\n",l=max(ans[v],max(w[lv],ans[lv])));flg=;break;
  16. }else ans[v]=max(w[lv],ans[lv]);
  17. if(flg)printf("%d\n",l=);
  18. }else{
  19. T++;while(f[u])u=f[u];while(f[v])v=f[v];if(u==v)continue;
  20. if(s[u]<s[v])swap(u,v);s[u]+=s[v],f[v]=u,w[v]=T;
  21. }
  22. }
  23. }

BZOJ 4668 LCT的更多相关文章

  1. [BZOJ 4668]冷战(带边权并查集+启发式合并)

    [BZOJ 4668]冷战(并查集+启发式合并) 题面 一开始有n个点,动态加边,同时查询u,v最早什么时候联通.强制在线 分析 用并查集维护连通性,每个点x还要另外记录tim[x],表示x什么时间与 ...

  2. 【BZOJ 4668 冷战】

    题目: [BZOJ 4668 冷战] 思路: 因为考虑强制在线,我们是肯定要维护形状的 我们发现如果\((u,v)\)这条边如果\(u,v\)已经连上,那么对于最终答案这条边是没有贡献的 所以我们发现 ...

  3. BZOJ 4668: 冷战 并查集启发式合并/LCT

    挺好想的,最简单的方法是并查集启发式合并,加暴力跳父亲. 然而,这个代码量比较小,比较好写,所以我写了 LCT,更具挑战性. #include <cstdio> #include < ...

  4. BZOJ 4668: 冷战

    Description 在一个图上,在两个点间连一条边,问这两个点最早在什么时候联通. Sol 并查集+启发式合并. 按秩合并的并查集...我也不知道什么是按秩合并,反正就跟启发式合并差不多,合并的时 ...

  5. BZOJ 2002 && BZOJ 2409 LCT && BZOJ 3282 初步练习

    #include <cstdio> ; inline void Get_Int(int & x) { ; ') ch=getchar(); +ch-'; ch=getchar(); ...

  6. bzoj 2002 LCT

    LCT最基础的题,就用到了一个ACCESS操作 首先我们将这个绵羊弹飞的情况看成一颗树,那么假设X点被弹飞到 Y点,那么Y为X的父亲节点,弹飞的话父亲节点为n+1(虚设) 那么每个询问就是询问X点到根 ...

  7. bzoj 3669 lct维护最小生成树

    大概题意:给一个无向图,有a,b两种边权,找一条从1到n的路径,使得max(a[i])+max(b[i])最小a[i],b[i]表示该路径上的边的对应权. 如果用类似最短路的DP来做,显然每个点的状态 ...

  8. bzoj 4668 冷战——并查集结构

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4668 不路径压缩,维护并查集的树的结构,查询链上最大值.按秩合并就可以暴爬. #includ ...

  9. bzoj 4668 冷战 —— 并查集按秩合并

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4668 按秩合并维护并查集的树结构,然后暴力找路径上的最大边权即可. 代码如下: #inclu ...

随机推荐

  1. stm32实现iap远程固件更新

    前提 想来做iap升级了,应该不是什么新手. 下面的程序需要用到一些简单的功能 串口收发数据开关总中断虽然本文标题是实现远程固件更新,但是具体远程方案本文不做详细说明,重点在于介绍mcu接收到新的固件 ...

  2. spring cloud feign 坑

    feign是啥? 很多人可能对于feign 不是很熟悉,可以看一下其他网友的实例分享:spring cloud feign简介 如果觉得上面这个比较难的话,还有一个简单入门的:spring cplou ...

  3. IOC容器Autofac使用

    今天我沉浸在IOC的设计模式追求中,听了很多课,也看了很多例子,这个是我的一个测试项目 为了测试代码,我首先准备了两个类一个Car和接口ICar,这两个类和我们平时项目中的DAL与IDAL相似,现在我 ...

  4. 55. spring boot 服务配置和部署【从零开始学Spring Boot】

    Spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动.其内置Tomcat容器或Jetty容器,具体由配置来决定(默认Tomcat).当然你也可以将项 ...

  5. RMI分布式议程服务学习

    转自:http://6221123.blog.51cto.com/6211123/1112619 这里讲述的是基于JDK1.5的RMI程序搭建,更简单的说是一个 HelloWorld RMI. 1. ...

  6. BZOJ2521 最小生成树 最小割

    5.26 T2:最小生成树 Description Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法 ...

  7. Java 实现代理(Proxy)模式

    类图 /** * 游戏者接口 * @author stone * */ public interface IGamePlayer { // 登录游戏 public void login(String ...

  8. POJ_1679_The Unique MST(次小生成树模板)

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 23942   Accepted: 8492 D ...

  9. sendredirect()和forward()的区别 (转)

    sendRedirect() 和forward()的区别 HttpServletResponse.sendRedirect与RequestDispatcher.forward方法都可以实现获取相应UR ...

  10. #HDU 3790 最短路径问题 【Dijkstra入门题】

    题目: 最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...