题目

P4271 [USACO18FEB]New Barns

做法

这题很长见识啊!!

知识点:两棵树\((A,B)\)联通后,新树的径端点为\(A\)的径端点与\(B\)的径端点的两点

不断加边,那就\(LCT\)维护联通块径端点就好了,两点的简单路径就是把链拉起来的子树

My complete code

#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
typedef int LL;
const LL maxn=1e6;
inline LL Read(){LL x(0),f(1);char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+c-'0',c=getchar();return x*f;
}
LL m,tot;
LL son[maxn][2],fa[maxn],size[maxn],f[maxn],le[maxn],re[maxn],r[maxn],sta[maxn];
inline void Update(LL x){size[x]=size[son[x][0]]+size[son[x][1]]+1;
}
inline bool Notroot(LL x){return son[fa[x]][0]==x||son[fa[x]][1]==x;
}
inline void Pushr(LL x){swap(son[x][0],son[x][1]),r[x]^=1;
}
inline void Pushdown(LL x){if(r[x]){if(son[x][0]) Pushr(son[x][0]);if(son[x][1]) Pushr(son[x][1]);r[x]=0;}
}
inline void Rotate(LL x){LL y(fa[x]),z(fa[y]),lz=(son[y][1]==x);if(Notroot(y)) son[z][son[z][1]==y]=x; fa[x]=z;son[y][lz]=son[x][lz^1];if(son[y][lz]) fa[son[y][lz]]=y;son[x][lz^1]=y; fa[y]=x;Update(y),Update(x);
}
inline void Splay(LL x){LL y(x),top(0);sta[++top]=y;while(Notroot(y)) sta[++top]=y=fa[y];while(top) Pushdown(sta[top--]);while(Notroot(x)){y=fa[x];if(Notroot(y)){LL z(fa[y]);if(((son[y][1]==x)^(son[z][1]==y))==0) Rotate(y);else Rotate(x);}Rotate(x);}
}
inline void Access(LL x){for(LL y=0;x;y=x,x=fa[x])Splay(x),son[x][1]=y,Update(x);
}
inline void Makeroot(LL x){Access(x),Splay(x),Pushr(x);
}
inline void Split(LL x,LL y){Makeroot(x),Access(y),Splay(y);
}
inline void Link(LL x,LL y){Makeroot(x),fa[x]=y;
}
inline LL Get_dis(LL x,LL y){Split(x,y); return size[y]-1;
}LL Get_fa(LL x){return f[x]=(f[x]==x?x:Get_fa(f[x]));
}
int main(){m=Read();while(m--){char ch; scanf(" %c",&ch);if(ch=='B'){++tot, size[tot]=1;LL x(Read());if(x==-1)f[tot]=le[tot]=re[tot]=tot;else{Link(tot,x); f[tot]=x=Get_fa(x);LL l1(Get_dis(le[x],tot)),l2(Get_dis(re[x],tot)),l3(Get_dis(le[x],re[x]));if(l1>l2&&l1>l3)re[x]=tot;else if(l2>l3)le[x]=tot;}}else{LL x(Read()),fx=Get_fa(x);printf("%d\n",max(Get_dis(x,le[fx]),Get_dis(x,re[fx])));}}
}

转载于:https://www.cnblogs.com/y2823774827y/p/10326219.html

P4271 [USACO18FEB]New Barns相关推荐

  1. P4269 [USACO18FEB]Snow Boots G

    思维题. 以地板为序构造链表,再排序,然后删除走不过去的地面. 删除的时候顺便维护最大的跨度,以此判断可行性. 总的来说利用了答案的单调性. #include <cstdio> #incl ...

  2. [USACO18FEB] Rest Stops(贪心)

    Description Farmer John and his personal trainer Bessie are hiking up Mount Vancowver. For their pur ...

  3. [USACO18FEB]Taming the Herd

    https://www.luogu.org/problemnew/show/P4267 题意:一群奶牛在若干天出逃,农夫从出逃的那天开始记录在本子上记录,每次记录的信息是:最近的上一次出逃是几天前,当 ...

  4. bzoj5192 [Usaco2018 Feb]New Barns

    http://www.elijahqi.win/2018/03/06/bzoj5192-usaco2018-febnew-barns/ Description FarmerJohn注意到他的奶牛们如果 ...

  5. [USACO18FEB]Slingshot

    题意可化为: 在二维平面中有n个点,坐标为\((x_i,y_i)\),点权为\(t_i\). 现有m个询问,每次给定点\((x,y)\),求\(\min\{|x-x_i|+|y-y_i|+t_i,|y ...

  6. luogu4088 [USACO18FEB]Slingshot

    link 这题在线得写树套树,所以我写的离线+树状数组 对于每个询问,Ans=\(\max_{j=1}^n{|a_j-x_i|+|b_j-y_i|+t_i}\) 拆成四种情况 \(x_i\le a_j ...

  7. 洛谷P4088 [USACO18FEB]Slingshot

    题面 大意:给出n个弹弓,可以用ti的时间把xi位置运到yi,在给出m组询问,求xj到yj最小时间. sol:首先如果不用弹弓,时间应为abs(xj-yj).否则时间就是abs(xi-xj)+abs( ...

  8. LUOGU P4088 [USACO18FEB]Slingshot(线段树)

    传送门 解题思路 推了推式子发现是个二维数点,想了想似乎排序加线段树难写,就写了个树套树,结果写完看见空间才\(128M\)..各种奇技淫巧卡空间还是\(MLE\)到天上.后来只好乖乖的写排序+线段树 ...

  9. 一道并查集的(坑)题:关闭农场closing the farm

    题目描述 in English: Farmer John and his cows are planning to leave town for a long vacation, and so FJ ...

最新文章

  1. docker技术剖析--docker资源限制及应用总结 for centos7.2
  2. SQL查询过滤Where子句用法
  3. JAVA面向对象-----instanceof 关键字
  4. java ip归属地查询_JAVA版IP地址查询调用示例
  5. 数据结构---function
  6. 【Python】字符串的格式化
  7. python获取他人的ip_Python获取指定网段正在使用的IP
  8. WhoIsOnline ;) - 解读CNForum源码中在线用户统计
  9. ASP.NET Core部署到CentOS7,使用Nginx代理
  10. Windows XP声卡驱动正常,丢失声音服务的解决
  11. Hibernate N+1 问题
  12. 手把手教你opencv做人脸识别(附源码+文档)
  13. Go语言学习之go环境搭建
  14. FireFox 插件xpi文件签名2
  15. token干什么用_token是什么意思(token的含义及使用方法)
  16. 免费滴永恒G,试试无妨
  17. Word给公式插入编号和引用
  18. JAVA面试八股文宝典(黑马学习随笔)-- 基础篇
  19. EXCEL中如何将文本格式的数字转换为日期格式
  20. 基础连接已关闭解决办法_手机wifi连不上怎么办 手机wifi连不上解决办法【详解】...

热门文章

  1. Flex 宋体、黑体、楷体、仿宋字体样式
  2. 【京东科技】视觉基础研究部研究型实习生招聘
  3. 多功能的图像超分辨模型:用于盲图像超分辨的非对称卷积神经网络
  4. 2020年,图机器学习将走向何方?
  5. 快了!CVPR 2019 所有录用论文题目列表刊出,即将开放下载!
  6. mysql聚合索引创建_为 MySQL 查询优化选择最佳索引
  7. pytorch错误解决 | 错误‘Widget Javascript not detected. It may not be installed or enabled properly.‘
  8. 2020年还需要阅读的10篇人工智能论文
  9. 最全深度学习资源列表!
  10. 9600kf功耗和温度评测_i5-9400F与i5-9600KF性能差距大吗?i5 9600KF和9400F区别对比