POJ 1716 區間最小點個數

2021-06-25 23:50:20 字數 1326 閱讀 9661

題意:

給你n個區間,每個區間最少取兩個元素,問你所有區間最少取幾個元素(可以滿足每個區間最少兩個元素)。

思路:

這個題目感覺挺巧妙的,之前在杭電上做過這個題目,這個題目可以用查分約束來做,對於每乙個區間a,b我們可以這樣 b - a >= 2 那麼建圖a->b 長度是2,全建完之後不要忘記題目的隱含條件,查分約束中隱含條件很重要,這個題目的隱含條件就是相鄰的兩個點之間的個數大於等於0,小於等於1,也就是  0 =< i - (i - 1) <= 1,然後拆成兩部分,對於i - (i - 1) >= 0  建立 (i - 1)-> i 長度0,對於i - (i - 1) <= 1先轉換成 (i - 1) - i >= -1 建立 i -> (i - 1) 長度是-1,然後以最小點為起點一邊最長路,在查分約束中要記住,求最小就跑最長路,求最大就跑最短路,其他的沒啥。

#include

#include

#include

#define n_node 11000

#define n_edge 33000

#define inf 1000000000

using namespace std;

typedef struct

star;

star e[n_edge];

int list[n_node] ,tot;

int mark[n_node] ,mki[n_node] ,s_x[n_node];

void add(int a ,int b ,int c)

bool spfa(int s ,int n)}}

}return 1;

}

int main ()

for(i = min ;i <= max ;i ++)

add(i - 1 ,i ,0) ,add(i ,i - 1 ,-1);

spfa(min ,max);

printf("%d\n" ,s_x[max]);

}return 0;

}

POJ 3171 區間覆蓋最小代價)

language default cleaning shifts time limit 1000ms memory limit 65536k total submissions 2093 accepted 735 description 有n 1 n 10,000 個區間,求覆蓋 m,e 0 m e...

poj 3485 區間選點

題意 x軸上公路從0到l,x軸上下有一些點給出座標代表村莊,問在公路上最少建幾個出口才能使每個村莊到出口的距離不超過d。以村莊為圓心,半徑為 d 畫圓,與公路相交,得到乙個乙個區間,這麼選點呢?按照區間右端點排序,第乙個點,選擇第一條線段的右端點,當前位置就在這裡,已經 很 靠後了,拿這個點去檢視以...

5 區間第k最小

description 找到給定陣列的給定區間內的倒數第 k小的數值。input 輸入的第一行為陣列,每乙個數用空格隔開 第二行是區間 第幾個數到第幾個數,兩頭均包含 兩個值用空格隔開 第三行為k值。output 結果。sample input 1 1 2 3 4 5 6 7 3 5 2 sampl...