题目链接

题意: 森林,动态建边、删边,询问从S开始走到T的期望时间。走位: 每次人会随机地选一条未走过的边走,走到无路可走,再退回。这样直到终点T。走一条边、从一条边退回都花费时间1.
题目特点是走到一棵子树一定会全走完,且是两遍的值。画个图,可以看出这一过程是:
从S开始,随机走到通往T的边或S的一棵子树,走S的子树i的期望为 \(2*p[i]*sz[i]\)(来回走);
在S->T的路径上,可能会随机走到一棵子树中,期望同样为 \(2*p[i]*sz[i]\)。
于是总期望为 \(Ans = ∑(枚举S的子树i)2*p[i]*sz[i] + ∑(枚举路径上的子树)2*p[i]*sz[i]\).
(这有图)
那么这个概率p[i]是多少呢,就是1/2啊。。不同子树间一点影响没有。
所以 \(Ans = ∑(枚举S的子树i)sz[i] + ∑(枚举路径上的子树i)sz[i]\). LCT维护子树sz[]就行了。(小数是唬人的)
输出的话,就输出 树的大小-sz_i[T]-1 或是 以T为根的左子树大小(到T的路径确实还有1,但是已经算上S的sz(1)了).

#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
const int N=1e5+5;namespace LCT
{#define lson son[x][0]#define rson son[x][1]int fa[N],son[N][2],sz[N],sz_i[N],sk[N];bool tag[N];inline void Update(int x){sz[x]=sz[lson]+sz[rson]+sz_i[x]+1;}inline bool n_root(int x){return son[fa[x]][0]==x||son[fa[x]][1]==x;}inline void Rev(int x){std::swap(lson,rson), tag[x]^=1;}inline void PushDown(int x){if(tag[x]) Rev(lson),Rev(rson),tag[x]=0;}void Rotate(int x){int a=fa[x],b=fa[a],l=son[a][1]==x,r=l^1;if(n_root(a)) son[b][son[b][1]==a]=x;if(son[x][r]) fa[son[x][r]]=a;fa[a]=x, fa[x]=b, son[a][l]=son[x][r], son[x][r]=a;Update(a);}void Splay(int x){int t=1,a=x; sk[1]=x;while(n_root(a)) sk[++t]=a=fa[a];while(t) PushDown(sk[t--]);while(n_root(x)){if(n_root(a=fa[x])) Rotate(son[a][1]==x^son[fa[a]][1]==a?x:a);Rotate(x);}Update(x);}void Access(int x){for(int pre=0; x; x=fa[pre=x])Splay(x), sz_i[x]+=sz[rson]-sz[pre], rson=pre;//Update(x);}void Make_root(int x){Access(x), Splay(x), Rev(x);}void Split(int x,int y){Make_root(x), Access(y), Splay(y);}int Find_root(int x){Access(x), Splay(x);while(lson) x=lson;return x;}bool pre_Link(int x,int y){Make_root(x);//Split(x,y); //已Find_root(y)return Find_root(y)==x;}void Link(int x,int y){sz_i[y]+=sz[x], fa[x]=y, Update(y);}bool pre_Cut(int x,int y){Make_root(x);return Find_root(y)==x&&fa[x]==y&&!rson;}void Cut(int x,int y){fa[x]=son[y][0]=0, Update(y);}int Query(int x,int y){//已pre_Link():Make_root(x), Access(y), Splay(y).return sz[son[y][0]];//return sz[y]-sz_i[y]-1;}
}
inline int read()
{int now=0;register char c=gc();for(;!isdigit(c);c=gc());for(;isdigit(c);now=now*10+c-'0',c=gc());return now;
}int main()
{int n=read(),q=read(),opt,x,y;while(q--){opt=read(),x=read(),y=read();if(!opt){if(LCT::pre_Link(x,y)) puts("ILLEGAL");else LCT::Link(x,y), puts("OK");}else if(opt==1){if(!LCT::pre_Cut(x,y)) puts("ILLEGAL");else LCT::Cut(x,y),puts("OK");}else if(LCT::pre_Link(x,y)) printf("%d.0000\n",LCT::Query(x,y));else puts("ILLEGAL");}return 0;
}

转载于:https://www.cnblogs.com/SovietPower/p/8636375.html

洛谷.U19464.山村游行wander(LCT 伪期望)相关推荐

  1. 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)

    洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...

  2. 洛谷.4172.[WC2006]水管局长(LCT Kruskal)

    题目链接 洛谷(COGS上也有) 不想去做加强版了..(其实处理一下矩阵就好了) 题意: 有一张图,求一条x->y的路径,使得路径上最长边尽量短并输出它的长度.会有<=5000次删边. 这 ...

  3. 洛谷P4338 [ZJOI2018]历史(LCT,树形DP,树链剖分)

    洛谷题目传送门 ZJOI的考场上最弱外省选手T2 10分成功滚粗...... 首先要想到30分的结论 说实话Day1前几天刚刚刚掉了SDOI2017的树点涂色,考场上也想到了这一点 想到了又有什么用? ...

  4. 洛谷P4219 大融合(LCT、虚子树)

    解析 本题需要用LCT维护子树大小 然后我就不会了 然后我就用树剖水过去了 又快又好写,真香 现在详细聊聊如何用LCT维护子树信息 每个结点再定义一个新的变量记录所有虚儿子的信息 然后-完了? 告别盲 ...

  5. 洛谷P1095守望者的逃离题解-伪动态规划/贪心

    链接 题目描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很 ...

  6. YBTOJ洛谷P3750:分手是祝愿(期望dp)

    传送门 文章目录 解析 代码 解析 首先,开关开关两次等于没动,所有对于一个解来说,开关的状态只有开与不开之分 接下来的一个关键点是:每一个开关的效果无法被其他开关操作的组合代替 所以这个题应该只有唯 ...

  7. 洛谷 P4546 bzoj 5020 在美妙的数学王国中畅游 —— LCT+泰勒展开

    题目:https://www.luogu.org/problemnew/show/P4546 先写了个55分的部分分,直接用LCT维护即可,在洛谷上拿了60分: 注意各处 pushup,而且 spla ...

  8. 洛谷P4319 变化的道路

    题意:给定图,每条边都有一段存在时间.求每段时间的最小生成树. 解:动态MST什么毒瘤...洛谷上还是蓝题... 线段树分治 + lct维护最小生成树. 对时间开线段树,每条边的存在时间在上面会对应到 ...

  9. 洛谷OJ上的A+B花(zhuang)式(bi)解法

    转眼间快到了8月,一想自己都毕业好久了,很怀念曾经在各大OJ上刷题的时光,今天无意在一个算法群里看到最近有个叫洛谷的oj网站貌似蛮火的,于是注册了一个下进去看一看,顺手打开了A+B problem,然 ...

  10. 信息学切题记录:永远的A+B Problem(洛谷P1001)

    作为一个CF灰名(丢脸啊,打比赛从绿名掉到了这个层次)的蒟蒻,我决定发篇文章记录一下我在洛谷上的第一道题目(A+B Problem),这道题,正常人一眼解决,但是为了凸显自己的大佬 蒟蒻身份,我要装逼 ...

最新文章

  1. [转载] 高等应用数学问题的matlab求解——第1章 计算机数学语言概述
  2. php网站灰颜色代码,css取消Safari浏览器链接点击颜色变灰-webkit-tap-highlight-color_html/css_WEB-ITnose...
  3. Java Web应用程序:Oozie及其使用方式
  4. 使用simple transformation查找xml file内某个节点的attribute是否存在指定value
  5. 我去德国出差后学习的一些德语
  6. python中ipo模型有_python ipo模型是指什么?_后端开发
  7. 陈睿学长在CUIT建校70周年校庆上的演讲
  8. 前端学习(2683):重读vue电商网站4之登录页面总结使用 iconfont 给输入框添加图标
  9. 我的世界服务器虚拟菜单插件,《我的世界》服务器快捷菜单插件怎么用?
  10. FTP常用的73个基本用法:
  11. 漫画: 可以给女朋友讲解 Linux 内核长啥样了
  12. 人生的意义,呵!我找到了
  13. 安卓Java按钮编写加一减一_android studio 中点击button加1或者减1
  14. 【算法理解】从头开始理解梯度提升算法
  15. es6 babel编译
  16. 35、html制作QQ彩贝热销时装页面(注意:需要素材)
  17. 【NLP】Word2Vec模型文本分类
  18. day073 项目_IT橘子爬虫
  19. Linux系统 Shell脚本语言
  20. recovery/removal time

热门文章

  1. 【渝粤教育】国家开放大学2018年秋季 1174t水工钢筋混凝土结构(本) 参考试题
  2. 【渝粤教育】国家开放大学2018年秋季 2780T遗传与育种 参考试题
  3. [渝粤教育] 西南科技大学 英语(A)2-在线考试复习资料
  4. 【渝粤教育】电大中专建筑力学_1作业 题库
  5. Baxter实战 (四)ubuntu14.04安装kinect V2
  6. ROS-Kinetic安装turtlebot-3并仿真
  7. 程序员让开,硅谷将是物理学家的天下,薪水高得离谱
  8. The Stanford Geostatistical Modeling Software(地质统计软件)
  9. 【Python实践-6】将不规范的英文名字,变为首字母大写,其他小写的规范名字...
  10. 2018/7/31-zznuoj-问题 A: A + B 普拉斯【二维字符串+暴力模拟+考虑瑕疵的题意-0的特例】...