time limit: 20 sec memory limit: 128 mb
submit: 211 solved: 65
[submit][status][discuss]
給出一棵n個點、以1為根的有根樹,點有點權。要求支援如下兩種操作:
m x y:將點x的點權改為y;
q x:求以x為根的子樹的最大連通子塊和。
其中,一棵子樹的最大連通子塊和指的是:該子樹所有子連通塊的點權和中的最大值
(本題中子連通塊包括空連通塊,點權和為0)。
第一行兩個整數n、m,表示樹的點數以及操作的數目。
第二行n個整數,第i個整數w_i表示第i個點的點權。
接下來的n-1行,每行兩個整數x、y,表示x和y之間有一條邊相連。
接下來的m行,每行輸入乙個操作,含義如題目所述。保證操作為m x y或q x之一。
1≤n,m≤200000 ,任意時刻 |w_i|≤10^9 。
對於每個q操作輸出一行乙個整數,表示詢問子樹的最大連通子塊和。
5 43 -2 0 3 -1
1 21 3
4 22 5
q 1m 4 1
q 1q 243
1我不知道什麼動態dp,我只知道這是乙個資料結構題。每次寫個樹鏈刨分都得弄半天orz。
大神題解:cqzhangyu
1 #include2view code#define clr(x) memset(x,0,sizeof(x))
3#define clr_1(x) memset(x,-1,sizeof(x))
4#define inf 0x3f3f3f3f
5#define ll long long
6#define pb push_back
7#define ls(i) (i<<1)
8#define rs(i) (i<<1|1)
9#define mp make_pair
10#define fi first
11#define se second
12using
namespace
std;
13const
int n=2e5+10;14
inttsize[n];
15int
son[n],down[n],top[n],dep[n],pos[n],pot[n],fat[n];
16int
tot;
17int
n,q;
18ll v[n],f[n],g[n],maxs[n];
19 vectore[n];
20struct
heap
2128 inline void
pop(ll x)
2933
inline ll top()
3440
void
pop()
4146
}lsq[n];
47void dfs1(int u,int d,int
fa)4865}
66//
cout<
return;68
}69void dfs2(int u,int
tp)7088}
89 f[u]=max(0ll,g[u]+f[son[u]]),maxs[u]=max(maxs[u],f[u]),maxs[u]=max(maxs[u],lsq[u].top());
90return;91
}92struct
segt
93107 }seg[n<<2
];108
void init(int i,int l,int
r)109
;114
return
;115
}116
int mid=l+r>>1
;117 init(i<<1
,l,mid);
118 init(i<<1|1,mid+1
,r);
119 seg[i]=seg[i<<1]+seg[i<<1|1
];120
return
;121
}122
char s[10
];123
void refresh(int i,int
pos)
124;
129 seg[i]=p;
130return
;131
}132
int mid=seg[i].l+seg[i].r>>1
;133
if(mid>=pos) refresh(i<<1
,pos);
134else refresh(i<<1|1
,pos);
135136 seg[i]=seg[i<<1]+seg[i<<1|1
];137
return
;138
}139 segt query(int i,int l,int
r)140
147void update(int
u,ll val)
148164
return
;165
}166
intmain()
167179 dfs1(1,1,0
);180 dfs2(1,1
);181 init(1,1
,n);
182for(int i=1;i<=q;i++)
183193
else
194199
}200
return0;
201 }
BZOJ 3306 樹 樹鏈剖分
和bzoj 3083比就是弱化版了。樣例都有點像?include include using namespace std const int n 100005,m n 3,inf 0x7fffffff int read int next m to m head n sz n son n top n ...
樹鏈剖分 bzoj2243
time limit 20 sec memory limit 512 mb submit 2492 solved 960 submit status 給定一棵有n個節點的無根樹和m個操作,操作有2類 1 將節點a到節點b路徑上所有點都染成顏色c 2 詢問節點a到節點b路徑上的顏色段數量 連續相同顏色...
bzoj4034 樹鏈剖分
time limit 10 sec memory limit 256 mb submit 7576 solved 2597 submit status discuss 有一棵點數為 n 的樹,以點 1 為根,且樹點有邊權。然後有 m 個 操作,分為三種 操作 1 把某個節點 x 的點權增加 a 操作...