要求平均值最大,二分平均值,判定是否存在一條合法路徑權值為正數,點分治+單調佇列
看上去沒有任何問題,然而其實每次點分的時候要按子樹深度從小到大排序然後更新答案
複雜度o(n log ^ 2 n)
這個東西交上去又t了,然後學習了一下分數規劃怎麼二分,發現了一點神奇的方法,交上去又t了(可能我自己寫炸了)........然後把兩種拼一起.......跑得飛起
這題t了7發......
#include#include#include#define eps 1e-5using namespace std;
int cnt,root,n,n,l,r,sz[100005],dep[100005],last[100005],vis[100005],q[100005],f_[100005];
double ans,cntkey,ans,g[100005],f[100005];
struct nodee[200005];
struct node1e[100005];
void add(int a,int b,double c)
void find_root(int x,int fa)
f_[x]=max(f_[x],n-sz[x]);
if (f_[x]=l && dep<=r) ans=max(ans,f[dep]);
for (int i=last[x]; i; i=e[i].next)
}void solve(int x);
}sort(e+1,e+cnt+1,cmp);
for (int i=1; i<=e[cnt].dep; i++) g[i]=-1e9;
for (int i=1; i<=cnt; i++)
while (head<=tail && q[head]=0;
}int main()
printf("%.3lf\n",l);
}return 0;
}
BZOJ1758 WC2010 重建計畫
description input 第一行包含乙個正整數n,表示x國的城市個數.第二行包含兩個正整數l和u,表示政策要求的第一期重建方案中修建道路數的上下限 接下來的n 1行描述重建小組的原有方案,每行三個正整數 a i,b i,v i 分別表示道路 a i,b i 其價值為 v i 其中城市由1....
BZOJ 1758 Wc2010 重建計畫
bzoj 1758 參考部落格 給出乙個 n 個節點帶邊權的樹,要求找出一條邊數在 l,u 之間的路徑使得 dfrace w 最大 n le100000,1 le l le u le n 1,v i le1000000 40sec,128mb 首先01分數規劃轉判斷問題,現在我們每個邊有新的邊權,我...
WC2010 重建計畫
嘟嘟嘟 要不這篇部落格我水一下?思路很顯然,點分治 01分數規劃 單調佇列。但就是難寫。點分治的時候我們把每乙個點到重心這條鏈按深度排序,然後對於每乙個點的鏈就有乙個連續深度的區間可以和這條鏈拼上,因為要找一條權值大於 0 的鏈,那就相當於找這個區間的最大值。然後隨著點深度遞增,這個區間就不斷向左移...