SWERC 2016 F題(dfs序 主席樹)

2021-08-04 02:56:07 字數 1196 閱讀 7202

題意:乙個有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時這個時候他被染色...