BZOJ2157 旅遊 樹鏈剖分

2022-02-04 07:33:07 字數 2393 閱讀 9449

ray 樂忠於旅遊,這次他來到了t 城。t 城是乙個水上城市,一共有 n 個景點,有些景點之間會用一座橋連線。為了方便遊客到達每個景點但又為了節約成本,t 城的任意兩個景點之間有且只有一條路徑。換句話說, t 城中只有n − 1 座橋。ray 發現,有些橋上可以看到美麗的景色,讓人心情愉悅,但有些橋狹窄泥濘,令人煩躁。於是,他給每座橋定義乙個愉悅度w,也就是說,ray 經過這座橋會增加w 的愉悅度,這或許是正的也可能是負的。有時,ray 看待同一座橋的心情也會發生改變。現在,ray 想讓你幫他計算從u 景點到v 景點能獲得的總愉悅度。有時,他還想知道某段路上最美麗的橋所提供的最大愉悅度,或是某段路上最糟糕的一座橋提供的最低愉悅度。

input

輸入的第一行包含乙個整數n,表示t 城中的景點個數。景點編號為 0...n − 1。

接下來n − 1 行,每行三個整數u、v 和w,表示有一條u 到v,使 ray 愉悅度增加w 的橋。橋的編號為1...n − 1。|w| <= 1000。

輸入的第n + 1 行包含乙個整數m,表示ray 的運算元目。

接下來有m 行,每行描述了乙個操作,操作有如下五種形式:

c i w,表示ray 對於經過第i 座橋的愉悅度變成了w。

n u v,表示ray 對於經過景點u 到v 的路徑上的每一座橋的愉悅度都變成原來的相反數。

sum u v,表示詢問從景點u 到v 所獲得的總愉悅度。

max u v,表示詢問從景點u 到v 的路徑上的所有橋中某一座橋所提供的最大愉悅度。

min u v,表示詢問從景點u 到v 的路徑上的所有橋中某一座橋所提供的最小愉悅度。

測試資料保證,任意時刻,ray 對於經過每一座橋的愉悅度的絕對值小於等於1000。

對於每乙個詢問(操作s、max 和min),輸出答案。

30 1 1

1 2 2

8sum 0 2

max 0 2

n 0 1

sum 0 2

min 0 2

c 1 3

sum 0 2

max 0 232

1-153

【資料範圍】

一共有10 個資料,對於第i (1 <= i <= 10) 個資料, n = m = i * 2000。

#include #include #include #define maxn 40005

#define inf 20000005

using namespace std;

struct nodee[maxn];

struct keepppq[maxn];

struct fdfdfda[maxn<<1];

int siz[maxn],top[maxn],fa[maxn],son[maxn],num[maxn],fnum[maxn],deep[maxn];

int n,m,cnt,head[maxn];

void addedge(int x,int y,int w)

void dfs_1(int u,int pre,int d)

void insert(int x,int v,int d)

pushdown(x);

insert(x<<1,v,d); insert(x<<1|1,v,d);

pushup(x);

}void modify(int x,int left,int right)

pushdown(x);

modify(x<<1,left,right); modify(x<<1|1,left,right);

pushup(x);

}void change(int u,int v)

fdfdfd query(int x,int left,int right)

; if(left<=a[x].l&&right>=a[x].r) return a[x];

pushdown(x);

fdfdfd temp1=query(x<<1,left,right),temp2=query(x<<1|1,left,right),temp;

temp.sum=temp1.sum+temp2.sum;

temp.maxx=max(temp1.maxx,temp2.maxx); temp.minn=min(temp1.minn,temp2.minn);

return temp;

}int asksum(int u,int v)

int askmax(int u,int v)

int askmin(int u,int v)

int main()

dfs_1(1,0,1); cnt=0; dfs_2(1,1); build(1,1,n);

for(int i=1;iscanf("%d",&m);

while(m--)

return 0;

}

BZOJ 2157 旅遊 樹鏈剖分

ray 樂忠於旅遊,這次他來到了t 城。t 城是乙個水上城市,一共有 n 個景點,有些景點之間會用一座橋連線。為了方便遊客到達每個景點但又為了節約成本,t 城的任意兩個景點之間有且只有一條路徑。換句話說,t 城中只有n 1 座橋。ray 發現,有些橋上可以看到美麗的景色,讓人心情愉悅,但有些橋狹窄泥...

BZOJ2157 旅遊,樹鏈剖分練習

傳送門 寫在前面 模擬賽中ca爺卡我記憶體,暴力100變60 不過還是親學長 畢竟在我初中的時候就是學長 每次做ca爺的題都是高分 思路 迄今做的最爽的樹鏈剖分 被char哥帶著做這道題,結果耗了好久時間調好,這應該是第一次寫邊鏈剖了?與點鏈剖不同的是要處理下邊 深度大的變成入點 然後建樹時,這個入...

BZOJ2157旅遊 樹鏈剖分 線段樹

ray 樂忠於旅遊,這次他來到了t 城。t 城是乙個水上城市,一共有 n 個景點,有些景點之間會用一座橋連線。為了方便遊客到達每個景點但又為了節約成本,t 城的任意兩個景點之間有且只有一條路徑。換句話說,t 城中只有n 1 座橋。ray 發現,有些橋上可以看到美麗的景色,讓人心情愉悅,但有些橋狹窄泥...