考慮乙個點 \(x\),肯定是選擇刪去它後最大的連通塊的乙個子樹連線到最小的連通塊的乙個子樹。答案範圍在次大連通塊大小和最大連通塊大小之間。
顯然這個東西是有單調性的,考慮二分答案 \(mid\),設最大最小的連通塊大小為 \(s1,s2\),那麼我們只需要知道最大的連通塊內是否有乙個子樹大小在 \([s2-mid,mid-s1]\) 之內就可以了。
如果最大連通塊是 \(x\) 的子節點為根的子樹,這個玩意直接線段樹合併就可以了。
如果最大連通塊是 \(x\) 的父親所在連通塊,我們發現 \(x\) 的祖先節點的大小會減小 \(\text_x\),其他節點不變。所以我們可以用所有大小在 \([s2-mid,mid-s1]\) 的點的數量,減去 \(x\) 子樹內在範圍內點的數量,再減去 \(x\) 祖先節點在範圍內的數量,加上 \(x\) 祖先在 \([s2-mid+\text_x,mid-s1+\text_x]\) 的數量即可。
用乙個樹狀陣列再維護一下 \(x\) 祖先就好了。
時間複雜度 \(o(n\log^2 n)\)。
#include using namespace std;
const int n=100010,lg=18,maxn=n*lg*4;
int n,tot,ans[n],fa[n],head[n],cnt[n],rt[n],siz[n],maxp[n][3],son[n];
struct edge
e[n];
void add(int from,int to)
; head[from]=tot;
}struct bit
int query(int x)
}bit;
struct segtree
int query(int x,int l,int r,int ql,int qr)
int merge(int x,int y)
}seg;
void ins(int x,int s,int v)
if (ql>qr)
if (son[x]!=fa[x])
else
}ans[x]=r+1;
bit.add(siz[x],1);
for (int i=head[x];~i;i=e[i].next)
dfs2(e[i].to);
bit.add(siz[x],-1);
}int main()
交通運輸部 網路貨運平台不得惡性低價競爭
程式設計客棧 www.cppcns.com 8月18日 訊息 今日,交通運輸部在 新聞辦公室例行吹風會上表示,交通運輸部會同相關程式設計客棧部門以交通運輸新業態協同監管部際聯席會議名義,約談了滿幫 貨拉拉 滴滴等平台企業,督促平台企業不得誘導貨主不合理 以及貨車司機惡性低價競爭。近期,交通運輸部會同...
交通運輸部 預計2023年快遞業務收入2032億
28日,交通運輸部黨組書記 部長 楊傳堂在2015年全國交通運輸工作會議上表示,2014年我國新增鄉鎮快遞網點近5萬個,農村快遞網點覆蓋率達50 圓滿完成快遞服務旺季保障工作。楊傳堂表示,2014年,郵政系統改革不斷深化,全國298個市 地 郵政企業全部完成更名掛牌。法規標準體系不斷完善,建立快遞業...
交通運輸部今年首次利用大資料引領春運
交通運輸部今年首次利用大資料分析旅客出行規律,預計今年春運期間,旅客平均出行距離約為410公里,其中500公里以內的約佔75 這是記者21日從交通運輸部獲悉的。交通運輸部今年首次利用大資料分析旅客出行規律,預計今年春運期間,旅客平均出行距離約為410公里,其中500公里以內的約佔75 這是記者21日...