uoj 349 WC2018 即時戰略

2022-05-02 03:24:10 字數 1506 閱讀 8547

題目鏈結

正解:$link-cut \ tree$。

這道題我在考場上從看題到放棄只花了$20$多分鐘。。

爆剛$t2$無果,$12$點的鐘聲響起,我無奈地開始看這道題,然後發現了生的希望。。

只寫了二十幾分鐘,然後又滾回去剛$t2$了。。正解根本就沒去想了(雖然本來也不會。。

不得不說這道題的標算還是很妙的,我就算去想也不可能往$lct$這方面想。。

我們每次新開乙個點,就直接從根結點開始$explore$。

我們可以用$lct$維護當前這棵樹的鏈,於是每次從現在$splay$的根結點開始往下走。

如果$explore$返回的點在左子樹,我們就往左移,在右子樹則往右移,如果不在這棵樹我們就直接跳到$explore$返回的這個點所在的樹。

可以發現,在一棵$splay$上我們最多隻會移動$splay$深度次數,那麼時間複雜度和查詢複雜度也可以保證在$o(n log n)$。

注意一點,就是每次找到目標點以後都要通過$access$來保證複雜度,以及鏈的情況需要特判。

$upd$:這個做法被$hack$了,所以我也不知道正解是什麼。

1

//rts sample program

2 #include 3 #include "

rts.h"4

#define il inline

5#define rg register

6#define n (300005)78

using

namespace

std;910

int ch[n][2

],fa[n],l[n],r[n],p[n],vis[n],lst,nxt,n;

1112 dequeq;

13 deque::iterator it;

1415 il void

work()

27 } else

if (lst==v)

34 } else43}

44}45return;46

}4748 il int isroot(rg int

x)51

52 il void pushup(rg int

x)56

57 il void rotate(rg int

x)63

64 il void splay(rg int

x)70

return;71

}7273 il void access(rg int

x)79

return;80

}8182void play(int _n, int t, int

datatype)

87for (rg int i=1;i<=n;++i) l[i]=r[i]=i;

88for (rg int i=2,x,v;i<=n;++i)

100}

101}

102access(x);

103}

104return

;105 }

UOJ 349 WC2018 即時戰略

題目鏈結 一開始已知一號點。每次可以選定乙個已知點和乙個未知點,然後互動庫會返回從已知點出發到達未知點路徑上的第二個點。要求在有限步之內知道每乙個點。次數要求 鏈的情況要求 o n o n o n 其餘是 o n logn o nlogn o nlog n 首先是鏈的情況,記錄當前左右端點不斷往後探...

UOJ 349 WC2018 即時戰略

被cqz d沒了。我d cly 關你啥事 逃 首先鏈的情況直接rand就好了。期望次數 o n log n 然而我一開始寫掛了。開始扯淡 我用這個模數,就可以過原題資料 c l y a k i o i 但是用以下兩種都不行 g l y a k i o i c l y a k i o i n o i ...

UOJ 349 WC2018 即時戰略

傳送門 按照紫荊花之戀的做法,動態維護一下點分樹的形態 把點隨機打亂 每次從當前的根開始 explore 如果已經有了就暴力跳到那個點 否則加入這個點 注意一條鏈的要單獨處理 include include rts.h using namespace std typedef long long ll...