p6670 [清華集訓2016] 汽水
給一棵樹,邊有邊權,要求找到一條路徑使得其平均值和 \(k\) 最接近。
首先樹上路徑容易想到點分治。
然後發現這可以套乙個 0/1 分數規劃,於是我們可以把所有的邊權減掉 \(k\),再二分 \(mid\)。
現在的問題就是判斷了。
我們發現答案具有單調性,於是我們可以排序過後雙指標維護路徑。
題解
#includeusing namespace std;
template inline void read(t &x)
while(isdigit(ch))
x=f?-x:x;
return ;
} template inline void write(t x)
#define ll long long
const int n=2e5+5;
const ll inf=1e18+7;
ll ans,k;
int n;
int head[n],nex[n],to[n],siz[n],idx;
ll val[n];
bool vis[n];
int size,root,fmax;
inline void add(int u,int v,ll w)
void getroot(int x,int fa)
max=max(max,size-siz[x]);
if(max<=fmax) fmax=max,root=x;
return ;
}struct edge
inline bool operator < (const edge &b)const
return false;
}inline bool check2(ll mid)
return false;
}void dfs(int x)
sort(p+1,p+cnt+1);
ll l=1,r=ans;
while(l<=r)
for(int i=head[x];i;i=nex[i])
return ;
}int main()
root=1,fmax=size=n;getroot(1,0),dfs(root);
write(ans);
return 0;
}
Luogu6670 清華集訓2016 汽水
luogu6670 清華集訓2016 汽水 網上說這道題是點分治?反正蒟蒻用邊分治切了這道題。題意就是求一條鏈,使它的平均權值與 k 的絕對值最小。設任意一條鏈為 求 min lvert frac t w i k rvert 我們考慮二分答案,然後我們需要判斷是否存在符合條件的鏈。我們二分的是 lv...
清華集訓2016 汽水
試題描述 牛牛來到了乙個盛產汽水的國度旅行。這個國度的地圖上有n個城市,這些城市之間用 n 1 條道路連線,任意兩個城市之間,都存在一條路徑連線。這些城市生產的汽水有許多不同的風味,在經過道路 i 時,牛牛會喝掉 wi 的汽水。牛牛非常喜歡喝汽水,但過量地用汽水是有害健康的,因此,他希望在他旅行的這...
UOJ276 清華集訓2016 汽水
link 先點分治,儲存下以當前重心為一端且不經過其它中重心的路徑,並按 overline w k 排序。然後二分答案,用雙指標掃每個重心的路徑,並維護下 overline w k 最小的路徑。注意不能選來自同一子樹的兩條路徑,因此我們再維護乙個與 overline w k 最小的路徑來自不同子樹的...