大佬都用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...