題目傳送門
格式難調,體面就不放了。
分析: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 這道...