鏈結
題意有1-n共n個城市,城市i與城市i-1相連線,現在有m個要求,每個要求包含兩個城市x、y,即它們二者不能相通,問要滿足這些要求,最小需要斷掉幾個城市的連線;
分析
考慮乙個很顯然的o(m**logm
)o(mlogm)
o(mlog
m)的做法,首先對所有線段按照右端點排序,然後每次在右端點處切,但是m達到了107,級別,所以不能通過此題
由於題目保證所有線段的值域為1−n,我們可以對所有左端點,直接記錄出右端點最靠左的位置同樣每次切右端點,掃一遍即可,時間複雜度:o(m
)o(m)
o(m)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 0x7f7f7f7f
#define maxn 100005
#define n 200005
#define p 2
#define mod 99991
typedef
long
long ll;
namespace fastio
while
(c >=
'0'&& c <=
'9') x = x *
10+ c -
'0', c =
getchar()
;return x * f;}}
using
namespace fastio;
using
namespace std;
int n, m, r[
10000077];
intmain()
int res =0;
r =0;
for(
int i =
1; i < n; i++
)else r =
min(r, r[i]);
} cout << res << endl;
}
牛客練習賽26 C 城市規劃
思路 這題要用o n 的複雜度 讀入優化才不會超時。對於線段 l,r 將右端點標記,同時儲存以點r為右端點的線段的最大左端點值max r 由小到大遍歷所有城市,同時用 l 表示已斷開的城市的最大值,在遇到城市i被標記時,判斷max r 與l的大小,若max r 大於l,則說明還有路徑沒有斷開,則 a...
牛客網練習賽26C城市規劃
輸入描述 第一行兩個整數n,m,分別表示城市的數量和請求的數量 接下來m行,每行兩個整數x,y,表示需要使得x不能到達y 輸出描述 輸出乙個整數,表示最小斷開橋的數量 思路 dp j i 表示 i,j 之間至少斷開一條路 當有多條要求都指向j時,保留其中最大值。include includeusin...
牛客練習賽 26
題目描述 小a的平面上有n個x型不明物體,但是他不確定他們的位置。現在請你來確定他們的位置,使得劃分形成的平面盡量多 輸入描述 乙個整數n,如題所示 輸出描述 乙個整數,表示最多把平面分成多少份 示例1輸入2輸出 平面分割問題,直線劃分平面,有個公式就是 cn 0 cn 1 cn 2 推導大致是這樣...