題目傳送門
assign the task
給你一棵樹,共n個結點,每個結點具有乙個顏色,可以對結點進行染色和查詢
共n-1條邊,分n-1行分別包含兩個整數u和v,表示v是u的父節點
然後有m次操作
若為染色操作則輸入「t x k」
若為查詢操作則輸入「c x」
首先可以用dfs序將無根樹區間化,即可以求出每個節點的管轄區間
然後就是區間修改,單點查詢即可,維護每個點的值即可
#include
using namespace std;
typedef pair<
int,
int> pii;
#define debug(a) cout<<#a<<"="<#define inf 0x3f3f3f3f
const
int n=
5e4+9;
int t, n, u, v, m, x, y, res;
int lid[n]
, rid[n]
, vis[n]
;char op;
vector<
int>g[n]
;struct segtreetr[n<<2]
;inline
void
dfs(
int v)
inline
intlc
(int p)
inline
intrc
(int p)
inline
void
build
(int p,
int l,
int r)
inline
voidf(
int p,
int k)
inline
void
push_down
(int p)
inline
void
updata
(int p,
int l,
int r,
int x,
int y,
int k)
if(tr[p]
.lazy)
push_down
(p);
int mid=
(x+y)
>>1;
updata(lc
(p), l, r, x, mid, k)
;updata(rc
(p), l, r, mid+
1, y, k);}
inline
intquery
(int p,
int d,
int x,
int y)
signed
main()
for(
int i=
1; i<=n; i++)if
(!vis[i]
)dfs
(i);
cin>>m;
printf
("case #%d:\n"
,++count)
;for
(int i=
1; i<=m; i++
)else
if(op==
't')}}
return0;
}
Assign the task(dfs序 線段樹)
hdoj 3974 題意 有一家公司有n個員工 從1到n 公司裡每個員工都有乙個直接的老闆 除了整個公司的領導 如果你是某人的直接老闆,那個人就是你的下屬,他的所有下屬也都是你的下屬。如果你是沒有人的老闆,那麼你就沒有下屬,沒有直接老闆的員工就是整個公司的領導,也就是說n個員工構成了一棵樹。公司通常...
dfs序 線段樹
傳送門 現有一棵樹,有以下操作 1.節點x及其所有子孫顏色都變更為k。2.要求你回答節點x的顏色。初始所有點都沒有染色。input 第一行乙個整數t t 10 表示樣例組數。對於每個測試樣例 第一行乙個整數n n 5e4 表示樹的節點個數。接下來n行,每行兩個整數u,v 1 u,v n 表示樹中u的...
HDU snacks (線段樹 dfs序)
problem description input 輸入資料第一行是乙個整數,表示有組測試資料。對於每組資料,包含兩個整數,表示有個零食機,次操作。接下來行,每行兩個整數和,表示編號為的零食機與編號為的零食機相連。接下來一行由個數組成,表示從編號為0到編號為的零食機的初始價值。接下來行,有兩種操作 ...