刷題總結 分糖果(bzoj2330)

2022-05-23 13:48:11 字數 1709 閱讀 2587

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

輸入的第一行是兩個整數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個小朋友分到的糖果;

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

5 71 1 2

2 3 2

4 4 1

3 4 5

5 4 5

2 3 5

4 5 1

11【資料範圍】

對於30%的資料,保證 n<=100

對於100%的資料,保證 n<=100000

對於所有的資料,保證 k<=100000,1<=x<=5,1<=a, b<=n

差分約束模板題目·····只是注意怎樣處理等於的情況就可以了

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int n=1e5+5

;queue

que;

int first[n],next[n*5],go[n*5],val[n*5],tot=1

;int

cnt[n],n,k;

long

long

dis[n];

bool

insta[n];

inline

void comb(int a,int b,int

c)inline

bool

spfa()}}

} return

true;}

intmain()

if(x==2

)

comb(a,b,1);

continue

; }

if(x==3

)

if(x==4

)

comb(b,a,1);

continue

; }

if(x==5

)

} for(int i=n;i>=1;i--)

comb(

0,i,1

);

if(spfa())

else

cout

<<"-1"

}

bzoj2330 差分約束 糖果

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

bzoj2330糖果(差分約束)

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

BZOJ 2330 糖果 差分約束求最小值

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