luogu題解 P3950部落衝突 樹鏈剖分

2022-03-13 05:43:53 字數 1176 閱讀 9876

大佬都用lct,我太弱只會樹鏈剖分

乙個很裸的維護邊權樹鏈剖分題.按照套路,對於一條邊\((dep(u),讓它邊權加1就在\(v\)點處+1,將邊的問題轉化為點的問題

然後對於c,u操作,線段樹單點修改,q操作區間查詢

#include #include #include #include #include #include #include #include #define ll long long 

#define ri register int

using namespace std;

template inline void read(t &x)

const int maxn=300005;

const int inf=0x7fffffff;

struct edgeedge[maxn<<1];

int h[maxn],num_edge=1;

inline void add_edge(int f,int to)

int dfn[maxn],tot=0,top[maxn],dep[maxn],fa[maxn],son[maxn],size[maxn];

void dfs_1(int now)

int query(int now,int l,int r)

int mid=(l+r)>>1,ans=0;

if(l<=mid)ans+=query(now<<1,l,mid);

if(middep[y])swap(x,y);

l=dfn[x]+1,r=dfn[y];

if(l>r)return 1;

tmp=query(1,1,n);//puts("f***");

//cout

return 1;

}inline void update_path(int x,int y,int z)

int main()

dep[1]=1,fa[1]=0;

dfs_1(1);

dfs_2(1,1);

memset(sum,0,sizeof(sum));

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

else if(opt[0]=='c')

else

} return 0;

}

P3950 部落衝突

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

題解 洛谷P3950 部落衝突

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

洛谷P3950 部落衝突 LCT

題目傳送門 格式難調,體面就不放了。分析 julao們應該都看得出來就是個 lct 板子,戰爭就 cut 結束就 link 詢問就 find 沒了。太久沒打 lct 然後發現自己之前貌似理解得並不透徹,打得還是不熟。code it is made by holselee on 5th sep 201...