牛客練習賽26 C 城市規劃

2021-08-27 14:11:40 字數 783 閱讀 2468

思路:這題要用o(n)的複雜度+讀入優化才不會超時。

對於線段[l,r],將右端點標記,同時儲存以點r為右端點的線段的最大左端點值max[r]

由小到大遍歷所有城市,同時用 l 表示已斷開的城市的最大值,在遇到城市i被標記時,判斷max[r]與l的大小,

若max[r]大於l,則說明還有路徑沒有斷開,則++ans,l=i;否則說明所有的路徑都已經斷開了

code :

#includeusing namespace std;

#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1<<22, stdin), p1 == p2) ? eof : *p1++)

char buf[(1 << 22)], *p1 = buf, *p2 = buf;

inline int read()

while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();

return x * f;

}const int max_n=1000005;

int n,m;

int max[max_n],b[max_n];

int main()

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

return 0;

}

牛客練習賽26 C 城市規劃

鏈結 題意有1 n共n個城市,城市i與城市i 1相連線,現在有m個要求,每個要求包含兩個城市x y,即它們二者不能相通,問要滿足這些要求,最小需要斷掉幾個城市的連線 分析考慮乙個很顯然的o m logm o mlogm o mlog m 的做法,首先對所有線段按照右端點排序,然後每次在右端點處切,但...

牛客網練習賽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 推導大致是這樣...