差分約束 糖果

2021-10-02 08:55:49 字數 2366 閱讀 6956

幼兒園裡有 n 個小朋友,老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。

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

幼兒園的糖果總是有限的,老師想知道他至少需要準備多少個糖果,才能使得每個小朋友都能夠分到糖果,並且滿足小朋友們所有的要求。

輸入格式

輸入的第一行是兩個整數 n,k。

接下來 k 行,表示分配糖果時需要滿足的關係,每行 3 個數字 x,a,b。

如果 x=1.表示第 a 個小朋友分到的糖果必須和第 b 個小朋友分到的糖果一樣多。

如果 x=2,表示第 a 個小朋友分到的糖果必須少於第 b 個小朋友分到的糖果。

如果 x=3,表示第 a 個小朋友分到的糖果必須不少於第 b 個小朋友分到的糖果。

如果 x=4,表示第 a 個小朋友分到的糖果必須多於第 b 個小朋友分到的糖果。

如果 x=5,表示第 a 個小朋友分到的糖果必須不多於第 b 個小朋友分到的糖果。

小朋友編號從 1 到 n。

輸出格式

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

資料範圍

1 ≤n

<

1051≤n<105

1≤n<10

5,1 ≤k

≤105

1≤k≤105

1≤k≤10

5,1 ≤x

≤5

,1≤x≤5,

1≤x≤5,

1 ≤a

,b≤n

1≤a,b≤n

1≤a,b≤

n輸入樣例:

5 71 1 2

2 3 2

4 4 1

3 4 5

5 4 5

2 3 5

4 5 1

輸出樣例:11i

>=x

j+

cx_i>=x_j+c

xi​>=x

j​+c

所以我們發掘不等式的時候應該去找大於。連邊的時候應該是j向i連線一條c的邊權。

我們建立乙個超級源點0,每個人的糖果都應該比他大所以表示式應該是x

i>=x

0+

1x_i>=x_0+1

xi​>=x

0​+1

然後就是審題找不等式關係。

1 ,a

>=b

,b

>=a

1,a>=b,b>=a

1,a>=b

,b>=a

2 ,b

>=a

+1

2,b>=a+1

2,b>=a

+13 ,a

>=b

3,a>=b

3,a>=b

4 ,a

>=b

+1

4,a>=b+1

4,a>=b

+15 ,b

>=a

5,b>=a

5,b>=a

當我們跑完最長路的時候,根據前言中所寫的不等式鏈的關係,我們上界應該是所有的最長路邊權之和。

這裡有乙個非常玄學的東西,我們存在負環的時候用佇列的spfa容易被卡掉,我們這裡採用的是用棧,這個優化不太穩定,比較玄學。優化大致上基於如下想法:如果存在乙個環,那麼用棧來搜尋時,會按照深度優先的順序,那麼很快就會沿著環找到起點。另外,這道題目可以用強聯通分量演算法來做,時間複雜度可以做到 o(n+m)o(n+m)。

#include

#define int long long

using

namespace std;

//typedef pairpp;

const

int n=

3e5+7;

int n,m,vis[n]

,ne[n]

,e[n]

,dis[n]

,w[n]

,head[n]

,cnt,con[n]

;void

add(

int a,

int b,

int c)

bool

spfa()

}}}return1;

}signed

main()

for(

int i=

1;i<=n;i++

)add(0

,i,1);

if(!spfa()

)else

return0;

}

差分約束 糖果

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

差分約束 糖果

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

分糖果 差分約束

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