luogu P3950 部落衝突

2021-10-07 15:50:30 字數 1625 閱讀 2982

題面傳送門

樹剖裸題,感覺難度虛高。

當兩個部落開戰時,我們就把下面那個點的權值設為1

11,休戰則設為0

00即可。

這樣有乙個好處就是查詢時如果有1

11可以直接跳出。

其他基本操作。

**實現:

#include

#include

using

namespace std;

int n,m,k,f[

600039

],x[

300039

],y[

300039

],hxy,sx,sy,sz,idea,id[

300039

],top[

300039

],d[

300039

],fa[

300039

],siz[

300039

],son[

300039];

char _s;

struct yyy

;struct ljb

; h[x]

=head;

}}s;

inline

void

get(

int x,

int y)

inline

intfind

(int x)

inline

void

dfs1

(int x,

int last)

cur=tmp.z;}}

inline

void

dfs2

(int x,

int last)

cur=s.h[x]

;while

(cur!=-1

)}inline

void

swap

(int

&x,int

&y)inline

void

find1

(int x,

int y)

x=fa[top[x]];

}if(d[x]

>d[y]

)swap

(x,y)

; ans=

find

(id[y])-

find

(id[x]);

if(ans)

putchar

('y'),

putchar

('e'),

putchar

('s'),

putchar

('\n');

}inline

void

get1

(int x,

int y)

inline

void

get2

(int x,

int y)

inline

void

read

(int

&x)int

main()

else

if(_s==

'c')

else

}}

luogu P3950 部落衝突 題解

題目連線 1.像我這種學資料結構學傻了的 2.邊權化點權 所有點權初始化0 3.對於戰爭 將深度較深的 1,對於和平 將深度較深的 1 4.對於歷史 用war記錄 5.特別注意 在兩個查詢的lca處判斷是否為 1並且當前的整條路徑上的點權也為 1時 同樣是yes using namespace st...

Luogu P3950部落衝突(樹鏈剖分)

題目鏈結 狀態奇差無比,sbt都能錯一遍。不動筆光想沒有想到怎麼做,畫圖之後發現乙個很明顯的性質 那就是兩個開戰的部落,其中乙個是另乙個的父親。所以在兒子那裡加個權值。查詢的時候樹鏈剖分查詢鏈上點權和,減去lca的點權 因為lca那如果有點權,代表的是lca和lca的父親之間的那條邊 include...

P3950 部落衝突

此題用樹鏈剖分是大材小用了,因為它可以處理 p,q 不相鄰的情況。簡化一下題意 這都是一些樹上的操作,乍一看可以用樹剖直接搞。但是因為這裡是邊進行操作,所以我們可以以點代邊,把邊看做點。每一次查詢的時候 lca p,q 是不能算的。如果 p,q 不相鄰,我們可以加入樹剖的修改操作,但是線段樹的修改操...