luogu P1505 國家集訓隊 旅遊

2021-10-07 13:28:34 字數 3279 閱讀 7112

題面傳送門

第一次一遍過國集紫題。好激動。

一看就是樹剖,只不過操作有點多。

把每條邊的權值放在兒子節點即可。

對於取相反數放懶標記即可。

其他是樹剖正常操作。

**實現:

#include

#include

#define max(a,b) ((a)>(b)?(a):(b))

#define min(a,b) ((a)<(b)?(a):(b))

using

namespace std;

int n,m,k,sx,sy,sz,x[

200039

],y[

200039

],z[

200039

],son[

200039

],siz[

200039

],d[

200039

],top[

200039

],id[

200039

],idea,fa[

200039

],flag[

800039

],smax[

800039

],smin[

800039

],sum[

800039];

char _s;

struct yyy

;struct ljb

; h[x]

=head;

}}s;

inline

void

swap

(int

&x,int

&y)inline

void

push

(int l,

int r,

int now)

inline

void

hebing

(int now)

inline

void

get1

(int x,

int z,

int l,

int r,

int now)

if(flag[now]

)push

(l,r,now)

;int m=

(l+r)

>>1;

if(x<=m)

get1

(x,z,l,m,now<<1)

;else

get1

(x,z,m+

1,r,now<<1|

1);hebing

(now)

;return;}

inline

void

get2

(int x,

int y,

int l,

int r,

int now)

if(flag[now]

)push

(l,r,now)

;int m=

(l+r)

>>1;

if(x<=m)

get2

(x,y,l,m,now<<1)

;if(y>m)

get2

(x,y,m+

1,r,now<<1|

1);hebing

(now);}

inline

intfind1

(int x,

int y,

int l,

int r,

int now)

inline

intfind2

(int x,

int y,

int l,

int r,

int now)

inline

intfind3

(int x,

int y,

int l,

int r,

int now)

inline

void

dfs1

(int x,

int last)

cur=tmp.z;}}

inline

void

dfs2

(int x,

int last)

cur=s.h[x]

;while

(cur!=-1

)}inline

void

gets1

(int x,

int y,

int z)

inline

void

gets2

(int x,

int y)

if(d[x]

>d[y]

)swap

(x,y)

;get2

(id[x]+1

,id[y],1

,n,1);

}inline

intfinds1

(int x,

int y)

if(d[x]

>d[y]

)swap

(x,y)

;return ans+

find1

(id[x]+1

,id[y],1

,n,1);

}inline

intfinds2

(int x,

int y)

if(d[x]

>d[y]

)swap

(x,y)

; tot=

find2

(id[x]+1

,id[y],1

,n,1);

return

max(ans,tot);}

inline

intfinds3

(int x,

int y)

if(d[x]

>d[y]

)swap

(x,y)

; tot=

find3

(id[x]+1

,id[y],1

,n,1);

return

min(ans,tot);}

intmain()

else

if(_s==

'm')

else

}else

if(_s==

'c')

else

}}

不得不說這道題5k5k

5k**真是毒瘤。

P1505 國家集訓隊 旅遊

題目鏈結 這道題其實還是比較好想的,同樣是邊權問題。我們需要維護最大值,最小值,和。最坑的地方就是路徑上的所有數變相反數,其實這個就是把區間和 1,區間最大 1,區間最小 1,最後pushdown的時候將取反標記 1,接下來一系列都是常規操作。而這裡還要記住,單點修改時也要下傳lazy標記。而我在跳...

P1505 國家集訓隊 旅遊

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

題解 P1505 國家集訓隊 旅遊

這篇題解主要講 實現,思路可能需要照著 理解,請慎重閱讀 兩張掛了,重新傳了一遍。最後 寫出來3.5kb,不到150行,相對來說還是挺短的.給定一棵 n 個節點的樹,邊帶權,編號 0 sim n 1 需要支援五種操作 保證任意時刻所有邊的權值都在 1000,1000 內。前置知識 樹鏈剖分。主要講 ...