題意:乙個有n個節點的樹,每個節點有等級和權值,問每個節點的子樹中等級比它小的節點的權值和。
思路:先求出這棵樹的dfs序,再對dfs序建立主席樹,然後對每個節點查詢
#include
#include
#include
#include
using
namespace
std;
typedef
long
long ll;
#define n 100010
struct rec
rec(int s,int t,ll w):s(s),t(t),w(w)
rec(const rec &a)
}seg[n*20];
int r[n],c[n],a[n],b[n],dfn[n],root[n];
int n,rt,cnt;
vector
g[n];
void dfs(int x,int fa)
b[x]=cnt;
}void build(int &x,int s,int t)
if(s==t) return;
int mid=seg[x].mid;
build(seg[x].ls,s,mid);
build(seg[x].rs,mid+1,t);
}void updata(int &x,int rot,int id,int w)
if(seg[x].s==seg[x].t) return;
int mid=seg[x].mid;
if(id<=seg[x].mid)
else
}ll query(int x,int rot,int l,int r)
int main()
}cnt=0;
dfs(rt,0);
cnt=0;
build(root[0],1,100000);
for(int i=1;i<=n;++i)
updata(root[i],root[i-1],r[dfn[i]],c[dfn[i]]);
for(int i=1;i<=n;++i)
printf("%lld\n",query(root[b[i]],root[a[i]-1],1,r[i]-1));
}return
0;}
JSOI2016 最佳團體 DFS序 樹形DP
洛谷 p4322 jsoi2016 最佳團體 description 茜茜的舞蹈團隊一共有 n 名候選人,這些候選人從 1 到 n 編號。方便起見,茜茜的編號是 0 號。每個候選人都由一位編號比他小的候選人 r i 推薦。如果 r i 0 則說明這個候選人是茜茜自己看上的。為了保證團隊的和諧,茜茜需...
乙個dfs序的題
一棵樹,每個節點上有di個商品,每個商品費用為ci,價值為wi,然後某個人在這棵樹上買東西,要求買東西的節點是乙個聯通塊。輸入 輸入第一行乙個正整數t,表示測試資料組數。對於每組資料,第一行兩個正整數n m 第二行n個非負整數w1,w2.wn 第三行n個正整數c1,c2.cn 第四行n個正整數d1,...
dfs序入門 CF上的幾道題
由於我太菜了,做了好幾道題終於感覺自己算是入門了 cf 343d 線段樹時間戳 三個操作 1 v 把v和v的所有兒子染色 2 v 把v和v的所有父親取消染色 3 v 查詢某個節點顏色 做法 利用染綠色的性質,如果某個節點在某個時間t1被染綠,在時間t2被取消,那麼當且僅當t1 t2時這個時候他被染色...