差分約束 糖果

2021-10-04 23:10:22 字數 1638 閱讀 5745

幼兒園裡有 nn

個小朋友,老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果的時候, 老師需要滿足小朋友們的 kk

個要求。幼兒園的糖果總是有限的,老師想知道他至少需要準備多少個糖果,才能使得每個小朋友都能夠分到糖果,並且滿足小朋友們所有的要求。輸入格式輸入的第一行是兩個整數 n,kn,k

。接下來 kk

行,表示分配糖果時需要滿足的關係,每行 33

個數字 x,a,bx,a,b

。如果 x=1x=1

.表示第 aa

個小朋友分到的糖果必須和第 bb

個小朋友分到的糖果一樣多。如果 x=2x=2

,表示第 aa

個小朋友分到的糖果必須少於第 bb

個小朋友分到的糖果。如果 x=3x=3

,表示第 aa

個小朋友分到的糖果必須不少於第 bb

個小朋友分到的糖果。如果 x=4x=4

,表示第 aa

個小朋友分到的糖果必須多於第 bb

個小朋友分到的糖果。如果 x=5x=5

,表示第 aa

個小朋友分到的糖果必須不多於第 bb

個小朋友分到的糖果。小朋友編號從 11

到 nn

。輸出格式輸出一行,表示老師至少需要準備的糖果數,如果不能滿足小朋友們的所有要求,就輸出 −1−1

。資料範圍1≤n<1051≤n<105

,1≤k≤1051≤k≤105

,1≤x≤51≤x≤5

,1≤a,b≤n1≤a,b≤n

輸入樣例:5 7

1 1 2

2 3 2

4 4 1

3 4 5

5 4 5

2 3 5

4 5 1

輸出樣例:11

#include

#include

#include

#include

using

namespace std;

const

int n =

1000010

, m =

3000010

;typedef

long

long ll;

int n, m;

int h[n]

, e[m]

, w[m]

, ne[m]

, idx;

ll dist[n]

;int q[n]

, cnt[n]

;bool st[n]

;void

add(

int a,

int b,

int c)

bool

spfa()

}}}return

true;}

intmain()

for(

int i =

1; i <= n; i ++

)add(0

, i,1)

;if(!

spfa()

)puts

("-1");

else

return0;

}

差分約束 糖果

幼兒園裡有 n 個小朋友,老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果的時候,老師需要滿足小朋友們的 k 個要求。幼兒園的糖果總是有限的,老師想知道他至少需要準備多少個糖果,才能使得每...

差分約束 糖果

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

分糖果 差分約束

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