hdu6191 廣西邀請賽K

2021-08-07 16:25:45 字數 2065 閱讀 6940

題目鏈結

題意是給一棵樹,每個點有點權,然後每次詢問給乙個子樹和乙個x,問子樹上面所有的點中異或x的最大值是多少。

這個題目可以離線用字典樹合併的方式,從葉子往根去合併,也可以用dfs序直接把子樹轉化為區間上的問題,然後用可持續化trie樹去做。

可持續化trie樹本質其實和主席樹的建樹方式差不多,動態建樹且每一次新增一條鏈。然後當詢問某乙個子樹的時候,通過dfs序把它變成乙個區間,然後就是01字典樹上面走走。從高到底看看這一位有沒有與x相反的bit位,如果有還要判斷是否在l到r的區間上。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define long long long

const

int inf=0x3f3f3f3f;

const long mod=1e9+ 7;

const

double pi=acos(-1.0);

#define clri(x) memset(x,-1,sizeof(x))

#define clr0(x) memset(x,0,sizeof x)

#define clr1(x) memset(x,inf,sizeof x)

#define clr2(x) memset(x,-inf,sizeof x)

#define eps 1e-10

#define lson l , mid , rt<< 1

#define rson mid + 1 ,r , (rt<<1)+1

#define root 1, n , 1

const

int maxn = 140000 ;

int l[maxn + 50 ] , r[maxn + 50] ;

int tot = 0;

int root[maxn + 50 ] ;

struct trie

}trie[ (maxn << 6 )+ (maxn << 5)];

struct edge

edge[200100] ;

int head[maxn] ;

int tot = 0 ;

int cnt = 0 ;

int v[maxn] ;

int rank[maxn] ;

void init()

void add(int u ,int v)

void dfs(int pre ,int u)

r[u] = cnt ;

}void build(int x)

now = trie[now].next[p] ;

trie[now].sum ;

}}int insert(int x , int rt , int d )

int que(int x ,int l_rt,int r_rt)

else}}

return res ;

}int main()

dfs( -1 , 1) ;

for(int i= 1;i<= n ; ++ i)

trie[0].init() ;

for(int i = 1 ;i<= n ; ++ i)

build(v[rank[ i ] ]) ;

root[0] = 0 ;

for(int i = 1;i<= n ; ++ i)

root[i] = insert( v[rank[i]] , root[i-1 ] , 31) ;

int u , x;

int l ,r ;

int ans = 0 ;

while(q --)

}return

0 ;}

廣西邀請賽總結

2017年8月25號到8月28號,zqu集訓隊6人參加了廣西的一次邀請賽,這是我們第一次離開廣東省打的邀請賽。雖然這次還是沒能衝擊到獎牌,但這次比賽使我更加堅定地在演算法競賽道路上付出的決心。廣西距離肇慶不遠,3個多小時高鐵就能到達南寧,這次學校的住宿日程安排我是滿意的。一共四天的行程,第一天到的下...

2017ACM ICPC廣西邀請賽

c counting stars 無向圖求三元環 這裡需要一些小小的改動 題目中要求的a結構其實是兩個具有一條公共邊的三元環 求這樣的個數 根據演算法我們一開始就是先列舉一條邊,這樣我們就以第一條邊為公共邊,找出三元環的個數,然後從這n個中選2個即可,也就是sum sum 1 2 include i...

2017 ACM ICPC 廣西邀請賽 題解

題目鏈結 problems hdoj上的題目順序可能和現場比賽的題目順序不一樣,我這裡的是按照hdoj的題目順序來寫的。problem 1001 簽到 include using namespace std define rep i,a,b for int i a i b i typedef lon...