SCOI2015 情報傳遞

2022-03-03 16:38:34 字數 1468 閱讀 6331

樹鏈剖分把樹上問題轉換成序列上的問題qwq,然後求鏈上小於i-k的節點個數。

可以離線做,先把所有操作讀入,這樣就不需要中間的修改了qwq

然後就是大力主席樹了qwqwq

**如下:

#include#include#include#include#include#include#define maxn 400010

using namespace std;

int n,m,tt,tot,root,cnt;

int head[maxn<<1],fa[maxn],st[maxn],rt[maxn],sum[maxn<<4],lc[maxn<<4],rc[maxn<<4];

int dep[maxn],top[maxn],siz[maxn],son[maxn],id[maxn];

struct nodenode[maxn];

struct edgeedge[maxn<<1];

inline void add(int from,int to)

inline void insert(int &x,int f,int l,int r,int pos)

inline int query(int l,int r,int ll,int rr,int k)

inline void build(int x)

}inline void dfs1(int x)

}inline void dfs2(int x,int topf)

}inline int lca(int x,int y)

if(dep[x]else return y;

}int main()

scanf("%d",&m);

for(int i=1;i<=n;i++) st[i]=m;

for(int i=1;i<=m;i++)

dep[root]=1;

dfs1(root);

dfs2(root,root);

build(root);

//for(int i=1;i<=n;i++) printf("rt[%d]=%d\n",i,rt[i]); puts("");

//for(int i=1;i<=n;i++) printf("dep[%d]=%d\n",i,dep[i]); puts("");

//for(int i=1;i<=n;i++) printf("fa[%d]=%d\n",i,fa[i]);

for(int i=1;i<=m;i++)

cur_ans+=query(1,m,rt[lca],rt[u],i-k-1);

cur_ans+=query(1,m,rt[lca],rt[v],i-k-1);

cur_ans+=(st[lca]<(i-k));

printf("%d %d\n",dep[u]+dep[v]-2*dep[lca]+1,cur_ans);}}

return 0;

}

SCOI 2015 情報傳遞

霧。emmmm.看到有區間查詢小於某值的個數。直接怒打一發 樹剖 樹套樹 經過無數次 re mle 以後,終於卡過去了 然而我為啥不用主席樹啊tat 智商下線 好像也沒有過 線段樹套個bit快一些 emmmm luogu 4216 bzoj 4448 本 可在bzoj上過,請在洛谷上酌情加空間qwq...

bzoj 4448 Scoi2015 情報傳遞

description 奈特公司是乙個巨大的情報公司,它有著龐大的情報網路。情報網路中共有n名情報員。每名情報員口j 能有 若t名 可能沒有 下線,除1名大頭日外其餘n 1名情報員有且僅有1名上線。奈特公司紀律森嚴,每 名情報員只能與自己的上 下線聯絡,同時,情報網路中仟意兩名情報員一定能夠通過情報...

BZOJ4448 Scoi2015 情報傳遞

bzoj4448 scoi2015 情報傳遞 奈特公司是乙個巨大的情報公司,它有著龐大的情報網路。情報網路中共有n名情報員。每名情報員口j 能有若t名 可能沒有 下線,除1名大頭日外其餘n 1名情報員有且僅有1名上線。奈特公司紀律森嚴,每名情報員只能與自己的上 下線聯絡,同時,情報網路中仟意兩名情報...