題目描述首先有乙個比較直觀的暴力,random_shuffle乙個詢問順序,同時維護一棵「已知樹」。小 m 在玩乙個即時戰略 (real time strategy) 遊戲。不同於大多數同類遊戲,這個遊戲的地圖是樹形的。也就是說,地圖可以用乙個由 \(n\) 個結點,\(n - 1\) 條邊構成的連通圖來表示。這些結點被編號為 \(1 \sim n\)。
每個結點有兩種可能的狀態:「已知的」或「未知的」。遊戲開始時,只有 \(1\) 號結點是已知的。
在遊戲的過程中,小 m 可以嘗試探索更多的結點。具體來說,小 m 每次操作時需要選擇乙個已知的結點 \(x\),和乙個不同於 \(x\) 的任意結點 \(y\)(結點 \(y\) 可以是未知的)。然後遊戲的自動尋路系統會給出 \(x\) 到 \(y\) 的最短路徑上的第二個結點 \(z\),也就是從 \(x\) 走到 \(y\) 的最短路徑上與 \(x\) 相鄰的結點。此時,如果結點 \(z\) 是未知的,小 m 會將它標記為已知的。
這個遊戲的目標是:利用至多 \(t\) 次探索操作,讓所有結點的狀態都成為已知的。然而小 m 還是這個遊戲的新手,她希望得到你的幫助。
每次從根節點開始詢問,回答要麼是當前點的兒子,要麼是乙個未知節點,如果是當前點的兒子就進入兒子節點,否則就把未知節點新增進樹。
這樣子做複雜度和詢問次數都是 \(o(n^2)\),加上一條鏈的暴力可以得到 \(65\) 分。
實際上每次如果是已知節點的話,只需要進入兒子對應的子樹詢問即可,所以很容易想到用點分樹維護這個「已知樹」,每次直接找到這個兒子對應的點分中心進行詢問,樹高變成 \(logn\) 。
但是加點操作會破壞點分樹的性質,使得樹高會大於 \(logn\) 以至於退化到平方級別的複雜度,在這裡可以用替罪羊樹的思想,每次加完點後暴力向上檢查子樹的平衡性暴力重構,\(\alpha\) 這裡一般設 \(0.7\) 。
不過由於我維護點分樹資訊的時候用 \(map\) 存了每個兒子對應的點分中心是什麼,所以我的複雜度是 $o(nlog^2n) $ ,有點卡常數,不保證所有地方都能過。
#include "rts.h"
/*program by mangoyang*/
#include#define inf (0x7f7f7f7f)
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b))
typedef long long ll;
using namespace std;
const int n = 1000005;
mapmp[n], ss[n];
int vis[n], vi[n], sz[n], in[n], cc[n], mx[n], fa[n];
int size[n], id[n], ps[n], all, mn, rt, root = 1;
map::iterator it;
namespace line;
inline void solve(int n)
} }}
inline void cleartag(int u)
inline void getsize(int u, int ff)
now = max(now, all - sz[u]);
if(now <= mn) mn = now, rt = u;
}inline void rebuild(int u)
}inline void update(int u)
if(!ned) return;
if(ned)
}inline void addnode(int pos) u = mp[u][x]; }}
void play(int n, int t, int datatype)
WC2018 即時戰略
繼紫荊花之戀後第二道蒟蒻所知道的會動的樹的點分治 題意 給你一顆未知的樹,你只知道1,你可以詢問explore u,v 得到 u,v 路徑上的第乙個點,請你在有限的詢問次數內確定這一棵樹 首先隨機化一下訪問次數,這樣就不會被奇奇怪怪地卡掉了 雖然出題人也是隨的資料 鏈,詢問次數限制n logn,記錄...
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 ...