BZOJ1146 CTSC2008 網路管理

2022-05-12 15:06:21 字數 923 閱讀 3552

**樹狀陣列與線段樹:

題目傳送門:

在尤拉序上用樹狀陣列套權值線段樹搞事情。在進的時候加一,出去的時候減一。

從尤拉序第一位到當前點的\(l\)就是根到當前點的狀態(因為其他的路徑一進一出抵消掉了),然後你求出兩個點的\(lca\)和\(lca\)的父親減一減跑一跑就好了。

時間複雜度:\(o(nlog^2n)\)

空間複雜度:\(o(nlog^2n)\)

**如下:

#include #include using namespace std;

#define low(i) ((i)&(-(i)))

const int maxn=8e4+5;

int n,m,tot,cnt,tim;

int opt[maxn],x[maxn],y[maxn];

int f[maxn][18],l[maxn],r[maxn];

int tmp[maxn<<1],a[maxn],dep[maxn];

int now[maxn],pre[maxn*2],son[maxn*2];

int read()

void add(int a,int b)

void init()

else }}

}t;

struct treearray

}void query(int fa1,int fa2,int u,int v,int k)

else

}printf("%d\n",tmp[l]);

}

}bit;

void dfs(int fa,int u)

int lca(int u,int v)

void work()

else

}} int main()

bzoj1146 網路管理

發現是鏈上的問題,所以樹鏈剖分 發現要查詢第k大,因為第k大不支援合併,所以要二分答案 二分答案後相當於詢問一些區間內大於某數的數個數,直接線段樹套平衡樹即可 時間複雜度 o nlog n 跟 o n 有什麼區別 可以卡過 1 include2 using namespace std 3 defin...

BZOJ 1919 Ctsc2010 效能優化

題目 題意 給出兩個長度為 n 的整數序列a 0.n 1 b 0.n 1 和非負整數 c 對於兩個長度為 n的整數序列,定義 運算,結果為乙個長度為 n的整數序列,例如f g h 則有h k i j k modn f i g j 求a b b b 每一位模 n 1 的值,其中有 c 個 運算,n 1...

bzoj 2306 Ctsc2011 幸福路徑

有向圖 g有n個頂點 1,2,n,點i 的權值為 w i 現在有乙隻螞蟻,從 給定的起點 v0出發,沿著圖 g 的邊爬行。開始時,它的體力為 1。每爬過一條邊,它的體力都 p,而螞蟻爬到某個頂點時的幸福度,是它當時的體力與該點權值的乘積。求最大幸福值。因為當體力很小後,對答案就沒什麼影響力,所以用乙...