bzoj4538 網路(整體二分 LCA BIT)

2021-08-08 02:25:36 字數 1958 閱讀 7714

題面

題意:有一棵n個點的數,要支援新增路徑,刪除路徑,路徑有權值。詢問所有不經過某個點的路徑的權值的最大值,沒有路徑或全部過這個點輸出-1。可離線。

聽kscla說線段樹+路徑交,一直t,所以就想整體二分吧。

根據圖論的套路,一條路徑(u,v)若過點x,則有u或v在x的子樹內,lca為x或x的祖先。那就是點修改,子樹查詢。在u,v+1,lca-1,father[lca]-1,然後區間查詢。用bit可以維護。

假設只有乙個詢問x,就二分乙個權值mid。若權值大於mid的路徑並沒有全部經過x(用上述的方法判斷),則x的答案大於mid。

對於可離線的多個詢問整體二分即可。

#include 

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define mmst(a, b) memset(a, b, sizeof(a))

#define mmcp(a, b) memcpy(a, b, sizeof(b))

typedef

long

long ll;

const

int n=200200;

int n,m,ans[n];

int to[n],head[n],nex[n],cnt;

int fa[n][20],times,l[n],r[n];

int bit[n];

void add(int x,int ad)

int sum(int x)

struct yy

f[n],le[n],ri[n];

void link(int u,int v)

void dfs(int x)

r[x]=times;

}int lca(int x,int y)

void update(int x,int hy)

void work(int x,int y,int ll,int rr)

int mid=(ll+rr)/2,t1=0,t2=0,now=0;

for(int i=x;i<=y;i++)

if(f[i].num!=0)

else

if(f[i].k>mid)

else

le[++t1]=f[i];

}for(int i=x;i<=y;i++)

if(f[i].ops!=0&&f[i].k>mid)

update(i,-1);

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

f[x+i-1]=le[i];

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

f[x+t1+i-1]=ri[i];

work(x,x+t1-1,ll,mid);

work(x+t1,x+t1+t2-1,mid+1,rr);

}int main()

dfs(1);

fa[1][0]=1;

for(int j=1;j<=19;j++)

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

fa[i][j]=fa[fa[i][j-1]][j-1];

int edge=0;

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

if(op==1)

f[i].num=i;

if(op==2)}}

mmst(bit,0);

work(1,m,1,1000000000);

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

if(ans[i])

printf("%d\n",ans[i]);

return

0;}

**都是模板,但我卻調了很久。可能是我最近沉迷電學,天天怠惰。

BZOJ1146 網路管理,整體二分

傳送門 logn 查詢時二分答案,查詢路徑上重鏈中的平衡樹,複雜度 log3n 總複雜度o nlogn qlog3n log2n 查詢時把 log 個主席樹放在一起查做到 log2n 感謝lucida的提醒 總複雜度o nlog2n qlog2n o q n23logn log2n 基本過不了,離線...

BZOJ 1305 二分 網路流

思路 建圖我根本沒有想到啊 我是不會告訴你我借鑑了一下題解的思路 把每個人拆成喜歡的和不喜歡的點 男 喜歡 向 男 不喜歡 連 邊權為k的邊 如果男喜歡女 那麼 男喜歡向 女喜歡 連 1 如果男 不喜歡女 那麼 男不喜歡 向 女不喜歡 連1 男 喜歡 向 男不喜歡 連k 女 不喜歡 向 女喜歡 連k...

CTSC2008 網路管理 樹剖 整體二分

這題的複雜度可以到達驚人的 log 4 據說還能跑過去 差點沒嚇死我 直接二分 樹剖樹套樹 n log 4 n 乙個 log 也不少的4 log 但是我有個 log 3 的樹剖上面整體二分 線段樹的做法 不過據說有個 log 做法,我不會,反正我菜就是了 然後的話 就直接考慮個消除貢獻 然而並不需要...