差分約束系統+poj1201
Language:
Intervals
Description
You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn.
Write a program that: reads the number of intervals, their end points and integers c1, ..., cn from the standard input, computes the minimal size of a set Z of integers which has at least ci common elements with interval [ai, bi], for each i=1,2,...,n, writes the answer to the standard output. Input
The first line of the input contains an integer n (1 <= n <= 50000) -- the number of intervals. The following n lines describe the intervals. The (i+1)-th line of the input contains three integers ai, bi and ci separated by single spaces and such that 0 <=
ai <= bi <= 50000 and 1 <= ci <= bi - ai+1.
Output
The output contains exactly one integer equal to the minimal size of set Z sharing at least ci elements with interval [ai, bi], for each i=1,2,...,n.
Sample Input 5 3 7 3 8 10 3 6 8 1 1 3 1 10 11 1 Sample Output 6
題意:給你一些區間,【a,b】從中至少取c個整數點,問最後最少需要取多少點。
思路:又是一個差分約束系統,前一段時間做過一個,但還是不太熟悉。
將區間[ai,bi]的每個端點看做一個頂點,以dist[i+1]表示源點x到i之間至少有與集合Z相同元素的個數。如果將至少含有的相同元素的個數看做邊的權值則一個區間[ai,bi]的兩個端點的dist[ai]和dist[bi+1]分別表示源點x到ai-1和bi的距離。那麼區間[ai,bi+1]又可以看做什麼呢?可以看做ai到bi的一條邊。依據題意 x、ai、bi構成了一個邊權三角形dist[bi+1]-dist[ai]>=ai->bi,即dist[bi+1]-dist[ai]>=ci;所以變形一下就得:dist[bi+1]>=dist[ai]+ci;注意:這個結果只是題目的要求,所以我們if(dist[bi+1]<dist[ai]+ci) dist[bi+1]=dist[ai]+ci;這也決定了求的是最長路徑。 如果只有題目所給的約束條件的話,是遠遠不夠的。所以還需要挖掘隱藏的條件:0<=dist[i+1]-dist[i]<=1。有了這個條件我們便可以建立資料結構了,然後我們以出現的最小元素min1為源點spfa,dist[max1]就是解了。 又看了一下什麼時候取最小值,什麼時候取最大值,d[v] <= d[u] + w(u, v), 初始化d[]為-INF. 這樣求出的d[]就是滿足條件的最小值。原因很簡單,因為d[i] 是從-INF開始增大,根據不等式逐漸增大,當滿足所有不等式時,那麼d[i]肯定是最小的了。d[v] >= d[u] + w(u, v), 初始化d[]為INF.這樣求出的d[]就是最大值。原因和上面一樣,因為是從INF逐漸減小的,當滿足完所有條件時,就停止。那麼d[i]是最大的了。 下面是程式碼:
|
相關文章
- 淺談差分約束系統
- 差分約束系統詳解
- 差分約束
- POJ 2983-Is the Information Reliable?(差分約束系統)ORM
- POJ 1364-King(差分約束系統)
- 演算法學習之路|差分約束系統演算法
- 差分約束學習筆記筆記
- POJ 3169-Layout(差分約束系統-入門裸題)
- 差分約束的一些理解
- POJ 3169(Bellman-Ford演算法,差分約束系統)演算法
- POJ 3159-Candies(差分約束系統-SPFA+鄰接表)
- uva 11478 最短路徑問題(負環,差分約束系統)
- [演算法學習筆記] 差分約束演算法筆記
- 差分約束系統+SPFA/Bellman判斷負權迴路+uva515
- Day2 尤拉路,拓撲排序和差分約束排序
- Atcoder ABC 216 G 01Sequence 題解 [ 藍 ] [ 差分約束 ]
- Javaweb-約束的分類JavaWeb
- 【SQL】15 SQL 約束(Constraints)、NOT NULL 約束、UNIQUE 約束、PRIMARY KEY 約束、FOREIGN KEY 約束、CHECK 約束、DEFAULT約束SQLAINull
- 時序分析:基礎知識整理(三)差分轉單端的約束等
- Javaweb-約束-外來鍵約束JavaWeb
- 資料庫系統之實體完整性約束資料庫
- Oracle定義約束 外來鍵約束Oracle
- SQL約束SQL
- Oracle約束Oracle
- oracle 約束Oracle
- MySQL 約束MySql
- 03約束
- 綜合約束
- 演算法隨筆——圖論之差分約束演算法圖論
- (10)邏輯綜合新增約束(環境約束)
- 約束介紹
- 資料庫的集合,分頁及約束條件資料庫
- Lp分紅USDT合約系統開發(邏輯說明)| Lp分紅USDT合約系統原始碼示例原始碼
- 建表時的約束的語法在informix和oracle中的差異ORMOracle
- Fintoch分投趣系統合約開發搭建
- C# 泛型 引用型別約束 值型別約束C#泛型型別
- SQLServer約束介紹SQLServer
- MySQL自增約束MySql