loj2341「WC2018」即时战略(随机化,LCT/动态点分治)

loj

Luogu

题解时间

对于 $ datatype = 3 $ 的数据,explore操作次数只有 $ n+log n $ 。

毫无疑问无论什么时候已经探索的区域都是一条链。

每当要探索出一个新点,不是在左侧就是在右侧。

最劣情况下调用次数为 $ 2n $ 。

只要随机打乱探索顺序,额外浪费的次数类似于上升子序列长度,期望 $ logn $ ,可以解决。

而对于其余数据,依然随机打乱探索顺序,

每次对于目标点,要点在于找到距离该点最近的已知点。

可以用动态点分治严格 $ nlogn $ 或LCT均摊 $ nlogn $ 。

#include<bits/stdc++.h>
// #include"rts.h"
int explore(int,int);
using namespace std;
typedef long long lint;
const int N=300011;
int n;
bool vis[N];int lst[N];
namespace task1
{
int fa[N],son[N][2];
int isroot(int x){return son[fa[x]][0]!=x&&son[fa[x]][1]!=x;}
void rot(int x)
{
int y=fa[x],z=fa[y],xis=son[y][1]==x,yis=son[z][1]==y;
if(!isroot(y)) son[z][yis]=x;
fa[x]=z,fa[y]=x,fa[son[x][xis^1]]=y;
son[y][xis]=son[x][xis^1],son[x][xis^1]=y;
}
void splay(int x)
{
while(!isroot(x))
{
int y=fa[x],z=fa[y],xis=son[y][1]==x,yis=son[z][1]==y;
if(!isroot(y)) rot(xis^yis?x:y);rot(x);
}
}
void access(int x){for(int lst=0;x;lst=x,x=fa[x]) splay(x),son[x][1]=lst;}
int anc(int x){while(!isroot(x)) x=fa[x];return x;}
int pre(int x){x=son[x][0];while(son[x][1]) x=son[x][1];return x;}
int nxt(int x){x=son[x][1];while(son[x][0]) x=son[x][0];return x;}
void find(int ep)
{
int x=anc(1);
while(x!=ep)
{
int y=explore(x,ep);if(!vis[y]) vis[y]=1,fa[y]=x,x=y;
else if(y==pre(x)) x=son[x][0];
else if(y==nxt(x)) x=son[x][1];
else x=anc(y);
}access(x);
}
void play(){for(int i=2;i<=n;i++)if(!vis[lst[i]]) find(lst[i]);}
}
namespace task2
{
void access(int &x,int ep){while(x!=ep) vis[x=explore(x,ep)]=1;}
void play()
{
for(int i=2,l=1,r=1,x=0;i<=n;i++)if(!vis[lst[i]])
access(vis[x=explore(r,lst[i])]?l:(vis[x]=1,r=x),lst[i]);
}
}
void play(int n,int lim,int type)
{
::n=n;srand(time(NULL));vis[1]=1;
for(int i=2;i<=n;i++) lst[i]=i;random_shuffle(lst+2,lst+1+n);
if(type!=3) task1::play();else task2::play();
}

loj2341「WC2018」即时战略(随机化,LCT/动态点分治)的更多相关文章

  1. LOJ2341. 「WC2018」即时战略 [动态点分治]

    LOJ 思路 考虑最蠢的暴力:枚举2~n,从1拉一条到他们的链,需要查询\(n^2\)次,显然不能通过. 考虑优化:如果拉的第一个点已经被访问过了,那么类似二分的做法,一次往那个方向多跳几步. 多跳几 ...

  2. 「WC2018」即时战略

    「WC2018」即时战略 考虑对于一条链:直接随便找点,然后不断问即可. 对于一个二叉树,树高logn,直接随便找点,然后不断问即可. 正解: 先随便找到一个点,问出到1的路径 然后找别的点,考虑问出 ...

  3. 【WC2018】即时战略(动态点分治,替罪羊树)

    [WC2018]即时战略(动态点分治,替罪羊树) 题面 UOJ 题解 其实这题我也不知道应该怎么确定他到底用了啥.只是想法很类似就写上了QwQ. 首先链的部分都告诉你要特殊处理那就没有办法只能特殊处理 ...

  4. 「WC2018」州区划分(FWT)

    「WC2018」州区划分(FWT) 我去弄了一个升级版的博客主题,比以前好看多了.感谢 @Wider 不过我有阅读模式的话不知为何 \(\text{LATEX}\) 不能用,所以我就把这个功能删掉了. ...

  5. 「WC2010」重建计划(长链剖分/点分治)

    「WC2010」重建计划(长链剖分/点分治) 题目描述 有一棵大小为 \(n\) 的树,给定 \(L, R\) ,要求找到一条长度在 \([L, R]\) 的路径,并且路径上边权的平均值最大 \(1 ...

  6. 【BZOJ3924】幻想乡战略游戏(动态点分治)

    [BZOJ3924]幻想乡战略游戏(动态点分治) 题面 权限题...(穷死我了) 洛谷 题解 考虑不修改 发现一个贪心的做法 假设当前放在当前位置 如果它有一个子树的兵的总数大于总数的一半 那么,放到 ...

  7. 【UOJ349】【WC2018】即时战略 LCT 动态点分治

    这是一道交互题 题目大意 有一棵\(n\)个点的树.最开始\(1\)号点是白的,其他点是黑的. 每次你可以执行一个操作:\(explore(x,y)\).要求\(x\)是一个白点.该函数会返回从\(x ...

  8. 【WC2018】即时战略

    题目描述 小M在玩一个即时战略(Real Time Strategy)游戏.不同于大多数同类游戏,这个游戏的地图是树形的. 也就是说,地图可以用一个由 n个结点,n?1条边构成的连通图来表示.这些结点 ...

  9. 洛谷P3345 [ZJOI2015]幻想乡战略游戏(动态点分治,树的重心,二分查找,Tarjan-LCA,树上差分)

    洛谷题目传送门 动态点分治小白,光是因为思路不清晰就耗费了不知道多少时间去gang这题,所以还是来理理思路吧. 一个树\(T\)里面\(\sum\limits_{v\in T} D_vdist(u,v ...

随机推荐

  1. Solution -「NOI.AC 省选膜你赛」寄蒜几盒

    题目 题意简述   给定一个含有 \(n\) 个顶点的凸多边形( \(n\) 是偶数),对于每一对相对的边(即中间有 \(\frac{n}2-1\) 条其它边),延长它们以将平面分割为多块,并把包含原 ...

  2. Solution -「CF 487E」Tourists

    \(\mathcal{Description}\)   Link.   维护一个 \(n\) 个点 \(m\) 条边的简单无向连通图,点有点权.\(q\) 次操作: 修改单点点权. 询问两点所有可能路 ...

  3. Solution -「USACO 2020.12 P」Spaceship

    \(\mathcal{Description}\)   Link.   Bessie 在一张含 \(n\) 个结点的有向图上遍历,站在某个结点上时,她必须按下自己手中 \(m\) 个按钮中处于激活状态 ...

  4. 关于TP90 TP99 等常用于评估软件系统的处理性能的指标概念

    工作中还是蛮少直接接触到评估系统性能的,但是不妨碍有兴趣了解.认为这是常识,只是个人才疏学浅不了解其定义. TP=Top Percentile,Top百分数,是一个统计学里的术语,与平均数.中位数都是 ...

  5. Redis 源码简洁剖析 16 - 客户端

    整体概述 客户端属性 套接字描述符 标志 输入缓冲区 命名及命令参数 命令的实现函数 输出缓冲区 客户端的创建与关闭 创建普通客户端 关闭普通客户端 参考链接 Redis 源码简洁剖析系列 整体概述 ...

  6. Gerrit的用法及与gitlab的区别

    来到一个新的团队,开发的代码被同事覆盖了.找同事核实,同事却说根本没有看到我的代码.经过一番沟通了解,原来他们的代码没有直接在gitlab上操作,而是先提交到gerrit,然后在提交到git.但是代码 ...

  7. 【Windows 访问控制】九、AccessCheck 的工作原理

    授权和访问控制组件 下图说明了授权Windows访问控制过程. 在此图中,主题 (由用户启动) 访问对象(如共享文件夹)的过程. 将用户的访问令牌中的信息与对象的安全描述 (AES) 中的访问控制项进 ...

  8. 商城秒杀系统总结(Java)

    本文写的较为零散,对没有基础的同学不太友好. 一.秒杀系统项目总结(基础版) classpath 在.properties中时常需要读取资源,定位文件地址时经常用到classpath 类路径指的是sr ...

  9. XStart远程连接Linux图形化界面

    转至:https://zhuanlan.zhihu.com/p/337791712 场景: 因在Linux中安装Oracle11g 需要调用Oracle的图形化界面,此时在宿主机上安装了 Xmanag ...

  10. SpringMVC教程--eclipse中使用maven创建springMVC项目

    一.在eclipse中创建maven-archetype-webapp项目: 1.新建项目选择maven项目 2.默认,下一步 3.选择maven-archetype-webapp,其他保持默认即可 ...