SCOI2016 線性基 幸運數字

2021-09-25 18:47:11 字數 906 閱讀 4562

本題在樹上,其實可以用trie樹水,我偏要線性基pwp

使用倍增減少複雜度。

我們在倍增lca陣列的基礎上多加一維維護線性基。

根據線性基性質(qwq),將乙個線性基插入另乙個線性基可以得到兩個數列合併後的線性基。

所以我們每次查詢用倍增跳的方式強行合併然後求最大就行。

#includeusing namespace std;

#define in read()

#define int long long

int in

while(isdigit(ch))return cnt*f;

}int first[200003],nxt[400003],to[400003],tot;

void add(int a,int b)

int n,q;

int p[20003][22][66],a[200003];

int fa[20003][22],dep[200003];

void insert(int *a,int x)

}void getlca() }}

int ans[66];

void lca(int x,int y)

} if(x==y)

for(int i=19;i>=0;i--)

} merge(ans,p[x][0]);merge(ans,p[y][0]);merge(ans,p[fa[x][0]][0]);

}void solve()

printf("%lld\n",sum); }

}signed main()

for(int i=1;idfs(1,0);

getlca();

solve();

return 0;

}

SCOI2016 幸運數字 點分治 線性基

更新提示 正文 description a 國共有 n 座城市,這些城市由 n 1 條道路相連,使得任意兩座城市可以互達,且路徑唯一。每座城市都有乙個幸運數字,以紀念碑的形式矗立在這座城市的正中心,作為城市的象徵。一些旅行者希望遊覽 a 國。旅行者計畫乘飛機降落在 x 號城市,沿著 x 號城市到 y...

SCOI2016 幸運數字

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

SCOI2016 幸運數字

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