題意:
有一條直線,直線上做多有50000個點,然後給你組關係 a b c表明a-b之間最少有c個點,問直線上最少多少個點。
思路:a-b最少有c個點可以想象a到b+1的距離是大於等於c的,還有乙個隱含條件就是
0<=s[i] - s[i-1]<=1,差分約束的題目記住找隱含條件很重要,這樣也就是一共三個條件,建邊求最上路,記住查分約束求短要用最長路,求最長要用最短路,最長路的建邊是
a ,b c
s[i-1] ,s[i] 0
s[i] ,s[i-1] -1
#include#include#include#define n_node 50000 + 100
#define n_edge 150000 + 10000
#define inf 1000000000
using namespace std;
typedef struct
star;
star e[n_edge];
int list[n_node] ,tot;
int s_x[n_node] ,mark[n_node] ,mkc[n_node];
void add(int a ,int b ,int c)
bool spfa(int s ,int n)}}
}return 1;
}int main ()
for(i = min + 1 ;i <= max ;i ++)
spfa(min ,max);
printf("%d\n" ,s_x[max]);
}return 0;
}
poj 1201 差分約束
傳送門 題意 ai到bi間至少有ci個元素,問所有數中至少有多少元素。額。這樣好像說不清楚,我拿樣例說下吧。3到7之間至少有3個元素,8到10之間至少有3個元素,6到8之間至少有1個元素,1到3之間至少有1個元素,10到11之間至少有1個元素。最少情況如下 1 2 3 4 5 6 7 8 9 10 ...
差分約束(poj 1201
這裡簡要記一下差分約束。所謂差分約束,指的是由a b c這種不等式組組成的約束系統。一般的線性規劃問題可以用單純形法解決,但是這種特殊情況可以借助最短路演算法解決。記源點到v的最短路為d v 從u到v的最短路為d u,v 差分約束的最短路做法基於最短路的以下特點 對於沒有負圈的圖,任意兩點d u d...
POJ 1201 差分約束系統
差分約束系統其實就是將不等式組的求解問題轉化為最短路進行求解,所以屬於圖論。但往往抽象出不等式組是不容易的。差分約束系統入門可看這位大佬的博文 夜深人靜寫演算法 四 本題大意 n個區間,輸入n行ai,bi,ci,代表在區間 ai,bi 上至少要選擇ci個整數點,可以在區間內任意取ci個不重複的點。求...