P6670 清華集訓2016 汽水

2022-10-10 22:15:28 字數 1272 閱讀 8521

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 最小的路徑來自不同子樹的...