SCOI2016 幸運數字

2022-03-27 03:32:58 字數 1003 閱讀 5349

題目

來寫乙個\(3\)個\(log\)的垃圾做法

其實非常顯然就是倍增把這條路徑處理一遍,之後維護出倍增陣列的線性基,大力合併就好了

線性基合併就是把乙個線性基的所有元素都拿出來,乙個乙個插入到另外乙個中去

**

#include#include#include#include#define maxn 20005

#define re register

#define ll long long

inline ll read()

struct ee[maxn<<1];

int f[maxn][17];

ll a[maxn],lb[maxn][17][66];

int log_2[maxn],deep[maxn],head[maxn];

int n,num,q;

inline void add(int x,int y)

void dfs(int x)

}inline void ins(ll x,int t,int b)

x^=lb[t][b][j]; }}

inline void merge(int x,int y,int c,int d)

}inline void solve(int x,int y)

if(deep[x]=0;--i)

if(f[x][i]&&deep[f[x][i]]>=deep[y])

merge(0,0,x,i),x=f[x][i];

if(x==y) return;

for(re int i=log_2[deep[x]];i>=0;--i)

if(f[x][i]!=f[y][i])

ins(a[x],0,0),ins(a[y],0,0);if(f[x][0])ins(a[f[x][0]],0,0);

}int main()

while(q--)

return 0;

}

SCOI2016 幸運數字

線性基合併o log 2n 不能更小 但是倍增o qlog 3n 可過233333 甚至樹剖o qlog 4n 可過666666 還有乙個樹上路徑查詢利器 點分治!詢問離線 列舉重心,處理路徑過重心的詢問 邊dfs邊插入線性基,維護每個點到根路徑上的線性基 每個詢問,如果所屬不同的子樹,那麼過當前重...

SCOI2016 幸運數字

不想說了.就樹上的線性基合併.但是講道理o nlogn 3 為什麼能過去呢.但是就是能過去啊,因為博主是菜雞不怎麼會澱粉質啊,所以本篇題解只能提供這個複雜度的演算法了qaq 求選出來一些數使得異或和最大?線性基啊!那怎麼求路徑上的呢?乙個乙個往上合併,一直合併到lca就行了吧!乙個乙個合併顯然不行,...

SCOI2016 幸運數字

題意 給定一棵n個點的樹,每個點有點權 g u 你需要回答q次詢問,每次詢問一條路徑 u,v 上選一些點的最大異或和。n leq 20000,q leq 200000,g u leq 2 題解 二合一板子題。寫了個樹剖發現 o n log 能過,我也不知道咋回事。點分治可以做到 o n log n ...