51nod 1671 貨物運輸

2021-08-13 08:36:51 字數 1326 閱讀 5405

公元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點時間就可以了。

input

第一行兩個整數n,m(1<=n,m<=500000)。

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

output

乙個數表示答案。
input示例

5 2

1 32 4

output示例

#include #include using namespace std;

const int maxn = 500100;

const int inf = 0x3f3f3f3f;

int n, m;

int l[maxn], r[maxn];

bool check(int mid)

d1 = max(d1,l[i] + r[i] - mid);

d2 = min(d2,l[i] + r[i] + mid);

c1 = max(l[i] - r[i] - mid, c1);

c2 = min(l[i] - r[i] + mid, c2);

if (d1 > d2)

if (c1 > c2)

}return true;

}int main()

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

}int left = 0;

int right = n;

int mid;

int result = -1;

while (left <= right)

else

}cout << result << endl;

return 0;

}

51Nod 1671 貨物運輸

acm模版 官方題解 首先我們需要注意到最重要的一點,所有運輸方案同時進行,我們只需要計算最後到達的方案的花費時間的最小值。所以我們需要考慮的是乙個極限情況,在這個極限情況下,其他運輸方案全部是在允許範圍內的。所以我們可以二分列舉這個極限情況,判斷所有方案是否都在這個極限內,在的話就繼續縮小極限,不...

51nod1671 貨物運輸

開始天真的我以為這道題和運輸計畫是一樣的套路。於是寫了一發,debug後發現過了第乙個點,十分開心的交了一發,結果只過了第乙個點。後來發現這個並不是一樣的,因為修建黑洞之後路徑法變了,而運輸計畫沒有 樹上兩點間路徑唯一 於是,第一題就成了題解題.這道題顯然滿足二分性質。問題在與如何判斷合法。首先,m...

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

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