洛谷P3950 部落衝突 LCT

2022-04-30 09:30:08 字數 1202 閱讀 3669

題目傳送門

格式難調,體面就不放了。

分析:julao們應該都看得出來就是個$lct$板子,戰爭就$cut$,結束就$link$,詢問就$find$。沒了。。。

太久沒打$lct$,然後發現自己之前貌似理解得並不透徹,打得還是不熟。。。

code:

//

it is made by holselee on 5th sep 2018

p3950

#include#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int n=3e5+7

;int n,m,fa[n],ch[n][2

],sign[n],cnt,q[n],top;

struct

wara[n];

inline

intread()

while( c>='

0' && c<='9'

)

return flag ? -num : num;

}inline

void pushdown(int

x)inline

bool isroot(int

x)inline

void rotate(int

x)inline

void splay(int

x) rotate(x);

}}inline

void access(intx)}

inline

int find(int

x)inline

void makeroot(int

x)inline

void split(int x,int

y)inline

void link(int x,int

y)inline

void cut(int x,int

y)int

main()

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

else

if( opt[0]=='c'

) else

}return0;

}

題解 洛谷P3950 部落衝突

text quad 一道很簡單的樹剖題,只有三種操作 其實是兩種 唯一要考慮的點是如何將邊權轉化成點權,考慮到每個點都有且只有乙個父親節點 除根節點1之外 那麼我們就可以將父親與兒子連線的邊權記錄到兒子身上,這樣 n 1 條邊就可以合理的分配到 n 1 個點上 除了根節點 這樣就轉化成了普通的樹鏈剖...

P3950 部落衝突

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

lg3950 部落衝突 (lct)

lg3950 就是lct,維護一下連通性 維護相通性的時候,可以用並查集維護吧 但也可以通過找根操作來看是否聯通 如果x y在一棵樹上,那麼x y他們這棵樹不管怎麼轉,做左邊的點一定是一樣的 因此findroot時,找到最左邊的點,看是否一樣 inline int findroot int x 這道...