題意:
給你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...