HDU 5699 貨物運輸 二分

2022-03-31 15:08:34 字數 1271 閱讀 4747

公元2023年,l國發生了一場戰爭。

小y負責領導工人運輸物資。

其中有m種物資的運輸方案,每種運輸方案形如li,ri。表示存在一種貨物從li運到ri。

這裡有n個城市,第i個城市與第i+1個城市相連(這裡1號城市和n號城市並不相連),並且從i號城市走到i+1號或者從i+1號走到i號需要耗費1點時間。

由於高科技的存在,小y想到了一種節省時間的好方案。在x號城市與y號城市之間設立傳送站,只要這麼做,在x號城市走到y號城市不需要耗費時間,同樣的,從y號城市走到x號城市也不需要耗費時間。

但是為了防止混亂,只能設立這麼一條傳送站。

現在這些運輸方案同時進行,小y想讓最後到達目的地的運輸方案時間最短。

在樣例中,存在兩條運輸方案,分別是1號城市到3號與2號到4號,那麼我們在2號城市與3號城市建立傳送站,這樣運輸方案時間最長的只需要1點時間就可以了。

多組測試資料

第一行兩個整數n,m(1≤n,m≤1000000)。

接下來m行,每行兩個整數li,ri(1≤li,ri≤n)。(若li=ri,則不需要耗費任何時間)

乙個數表示答案。

5 21 3

2 4二分答案

設修橋的區間為l,r,我路線為l,r

那麼 |l-l|+|r-r|<=mid

則:l - l + r - r <= mid

l - l + r - r <= mid

l - l + r - r <= mid

l - l + r - r <= mid

所以:l + r - mid <= l + r <= l + r + mid

l - r - mid <= l - r <= l - r + mid

然後檢查是否有合法的 l+r就好了……

#includeusing namespace std;

const int maxn = 1e6+7;

int l[maxn],r[maxn];

int n,m;

bool check(int k)

if(min>max)return 0;

min=-1e9,max=1e9;

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

if(min>max)return 0;

return 1;

}void solve()

int l=0,r=n,ans=n;

while(l<=r)

printf("%d\n",ans);

}int main()

HDU 5699 貨物運輸

problem description 公元2222年,l國發生了一場戰爭。小y負責領導工人運輸物資。其中有 m 種物資的運輸方案,每種運輸方案形如 l i,ri 表示存在一種貨物從 l i 運到 r i 這裡有 n 個城市,第 i 個城市與第 i 1個城市相連 這裡 1 號城市和 n 號城市並不相...

二分 曼哈頓距離 51Nod 1671 貨物運輸

題面在這裡 首先想到二分,設當前答案為 s 傳送門的兩個端點為x,y 則對於ti si s 的路徑,必須滿足 x si y ti s 這個可以理解為曼哈頓距離 而到某個定點 s i,ti 的曼哈頓距離相等的點構成的集合是乙個正方形 相當於判斷所有正方形是否有交 示例程式 include includ...

運輸計畫 二分答案 樹上差分

p2680 運輸計畫 附贈樣例圖 首先容易想到二分答案,將求解問題轉換為判定,並且注意到答案顯然具有單調性。然後我們考慮如何快速判定。先預處理出所有計畫路徑長 dis i 表示根節點到節點 i 的距離,dis u dis v 2 times dis lca u,v 即為樹上 u,v 路徑長 對於那些...