spfa 差分約束模板

2021-10-05 10:18:40 字數 1168 閱讀 2269

cf1131d

給出乙個n*m關係表,有<>=三種關係,要求為這n+m個物件分配乙個值,使得滿足約束關係且最大值最小。

用差分約束,>轉化為》=x+1。=轉化為》=且<=。如果y要比x至少大1,就建立邊x指向y。對於這樣一張圖,滿足所有要求其實就意味著能走的邊都走(滿足關係),不能滿足的點就鬆弛(變大),類似求最長路。

bfs版spfa

123

4567

891011

1213

1415

1617

1819

2021

2223

2425

2627

2829

3031

3233

3435

3637

3839

4041

4243

4445

4647

4849

5051

5253

5455

5657

5859

6061

6263

6465

6667

6869

7071

7273

7475

#includeusing namespace std;

const int maxn=1001;

typedef paire;

vectores[2*maxn]; //因為有01兩種邊權,所以要記錄權值

int n,m;

bool vis[maxn*2];

int d[2*maxn];

int cnt[maxn*2]; //由於每條路最多經過v個頂點,超過就有正圈

bool spfa(int s)}}

}return true;

}char s[maxn];

int main()else if(s[j]=='>')else}}

for(int i=1;i<=n+m;i++)

es[0].push_back(e(i,1));

bool ok=spfa(0);

if(ok)

}if(ok)else

return 0;

}

設計 SPFA 差分約束

有n nn頭牛,現在要設計乙個順序讓他們站成一排給他們餵食。奶牛們按照編號順序依次站立,允許有多隻牛站在同一位置。有一些牛希望之間的距離在某個範圍內,也有一些牛希望兩之間的距離大於等於某個距離。如果存在某種方案滿足上述要求,請你輸出1 11號牛和n nn號牛之間最大距離。i np ut input ...

POJ3169差分約束 SPFA 差分約束

思路 假設i j 兩隻奶牛可以站在同乙個位置,但是必須公升序排列,所以有差分約束方程d i d i 1 0 對於兩隻有好感的奶牛有差分約束方程d j d i k 對於兩隻反感的奶牛有差分約束方程d i d j k 有了約束方程就可以spfa include include include inclu...

SCOI 糖果 差分約束 SPFA

scoi 糖果 題目描述 幼兒園裡有n個小朋友,lxhgww老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果的時候,lxhgww需要滿足小朋友們的k個要求。幼兒園的糖果總是有限的,lxhg...