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...