離線以後點分
對於每個點,都用這個點的祖先把這個點的子樹更新一遍,
考慮到操作時間早的才能更新晚的和題目中說的「路徑上邊權都大於等於val
valva
l」,那就用樹狀陣列做一下二維偏序就行了
#include
using
namespace std;
typedef
long
long ll;
#define rep(i,a,b) for(register int i=(a);i<=(b);++i)
#define dep(i,a,b) for(register int i=(b);i>=(a);--i)
inline
chargc(
)inline
intrd()
char pbuf[
100000],
*pp=pbuf;
inline
voidpc(
char ch)
inline
void
wri(ll x)
inline
void
wln(ll x)
inline
void
flush()
const
int n=
100002
;struct node
node
(int x_,
int y_,
int v_)
bool
operator
<
(node a)
const
}a[n]
,b[n]
;struct kke[n<<1]
;int dep[n]
,h[n]
,tot,tot1,tot2,op[n]
,x,y,z,u,sz[n]
,n,m,mx[n]
,rt,st[n]
;ll t[n]
,ans[n]
;bool vis[n]
;vectormd[n]
;vector<
int>q[n]
,v;void
add(
int x,
int y,
int z)
,h[x]
=tot;
}void
clear
(int x)
void
add(
int x,
int y)
ll query
(int x)
void
getrt
(int u,
int fa)
void
init
(int u,
int fa)
void
dfs1
(int u,
int w)
void
dfs2
(int u,
int fa,
int w)
void
solve
(int u)
rep(j,
1,tot1)
clear
(a[j]
.y);
}void
work
(int u)
u=rt;
solve
(u),vis[u]=1
;for
(int i=h[u]
,v;i;i=e[i]
.ne)if(
!vis[v=e[i]
.to]
)work
(v);
}int
main()
else
} dep[0]
=-1,
init(1
,0);
mx[0]
=1e9
;work(1
);rep(i,
1,m)
if(op[i]==1
)wln
(ans[i]);
flush()
;}
紹興一中模擬賽3 13 排列的區間最大值限制
有乙個大小為n n 109 n n 10 9 n n 10 9 的排列和m m 50 m m 50 m m 50 個限制,每個限制 l,r,q l,r,q l,r,q 表示在區間 l,r l,r l,r 內的最大值必須是q qq,問是否存在乙個滿足所有條件的排列 考慮貪心 網路流也可以做,本質是一樣...
題解 紹興一中 7 26 T3
傳送門 模擬賽的t3 沒追求的我直接暴力bfs70分 很明顯的需要記錄狀態vis u hp vis u hp vis u hp 表示是否出現過到點u,體力為hp這種情況 70分沒毛病 比較秒的小優化思想是記錄之前到過每個點的體力最大值,這樣bfs時如果體力大於目標點之前最大體力才入隊,vis陣列就不...
2019暑假紹興第一中學遊記
12 40到了衢州二中,老葉講了點東西就上路 去紹興 了。路上坐大巴坐了四個小時,看 abc 寫了下他部落格的 argon 主題,然後做了會兒作業。到了紹興第一中學旁邊的某學校的交流中心下榻,和 abc 乙個房間,打了 10161.一本通 5.2 練習 4 葉子的染色,再複習了下板子 11 30 就...