poj1201 spfa差分約束

2021-06-23 00:45:22 字數 697 閱讀 7087

差分約束就是把不等式似的的東西轉化為最短路求解,格式是所有式子都是兩個未知數的差小於等於某個常數的就算,當然大於等於也可以,本題就是大於等於,乘-1就好~

1201題意:

[ai,bi]上至少要選擇ci個整數點,可以在區間內任意取不重複的點

,問最少選多少個點,這麼些區間有重合部分,所以,列不等式啦

s[bi]-s[ai-1]>=ci

s[i]-s[i-1]<=1;

s[i]-s[i-1]>=0

據說一般差分約束系統是有負權邊的,所以用可以判斷的spfa

/*sbi - sai >= ci

si - si-1 >= 0

si-1 - si >= -1

*/#include#include#include#include#include#includeusing namespace std;

#define maxn 50005

#define inf 1000000007

struct edge//使用鄰接表存邊

edge[3*maxn];

int first[maxn],d[maxn],visit[maxn];

int e,n,maxx,minn;

void addedge(int a,int b,int c)//新增新邊

void spfa()

for(int i=minn;i

poj 1201 差分約束 spfa

題意 在區間 0,50000 上有一些整點,並且滿足n個約束條件 u,v,w 即在區間 u,v 上至少有x個整點,問區間 0,50000 上至少有幾個整點。思路 spfa 鄰接表 差分約束。構造差分約束系統的關鍵 用dict i 表示區間 0,i 上的整點數,則約束條件可化為dict v dict ...

POJ1201 差分約束系統 SPFA實現

題目很簡單,用差分約束系統解決。假設si z與結合 1,i 的交集的元素的個數,則依題意有s b 1 s a c,還有隱含條件s i 1 s i 0 s i s i 1 1。然後求最短路徑或最長路徑,用bellman ford演算法解會超時,於是用spfa演算法解,288ms,還算快。可以通過spf...

poj 1201 spfa 區間取數

題意 給定若干區間,並為每個區間指定乙個數值。如區間為 ai,bi 數值為ci。求乙個最小集合s,使得每個區間 ai,bi 都至少包含其中的ci個數。思路 差分約束思想。s bi 1 s ai ci bi 1的原因是bi也要選進來。對於這種閉區間,要注意邊界的選擇。此外還必須有 s i s i 1 ...