description
幼兒園裡有n個小朋友,lxhgww老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果的時候,lxhgww需要滿足小朋友們的k個要求。幼兒園的糖果總是有限的,lxhgww想知道他至少需要準備多少個糖果,才能使得每個小朋友都能夠分到糖果,並且滿足小朋友們所有的要求。input
輸入的第一行是兩個整數n,k。 接下來k行,表示這些點需要滿足的關係,每行3個數字,x,a,b。 如果x=1,output表示第a個小朋友分到的糖果必須和第b個小朋友分到的糖果一樣多; 如果x=2, 表示第a個小朋友分到的糖果必須少於第b個小朋友分到的糖果;
如果x=3, 表示第a個小朋友分到的糖果必須不少於第b個小朋友分到的糖果; 如果x=4,
表示第a個小朋友分到的糖果必須多於第b個小朋友分到的糖果; 如果x=5, 表示第a個小朋友分到的糖果必須不多於第b個小朋友分到的糖果;
輸出一行,表示lxhgww老師至少需要準備的糖果數,如果不能滿足小朋友們的所有要求,就輸出-1。sample input
5 7sample output hint1 1 2
2 3 2
4 4 1
3 4 5
5 4 5
2 3 5
4 5 1
題解對於所有的資料,保證 k<=100000,1<=x<=5,1<=a, b<=n對於30%的資料,保證 n<=100
對於100%的資料,保證 n<=100000
我永遠不會說這是一道坑人的題的這題很強的!1a的都是省隊爺
差分題,那麼我們列個表
x=1 a=b a>=b+0 且 b>=a+0
x=2 a<=b-1 b>=a+1
x=3 a>=b a>=b+0
x=4 a>=b+1 a>=b+1
x=5 a<=b b>=a+0
另 a>0 a>=1
若進不去d[y]<d[x]+k 則表明d[y]>=d[x]+k 滿足上述條件
這就可以看見了。。跑最長路啦
看起來,好水啊,我要1a
結果貢獻了一版tle
要了波資料,發現有乙個資料是。。10w個點連成一條鏈?????
於是,那就入隊方式改一改 。從n~1
結果就a了????還是300ms的
枉我t了20多次
#include
#include
#include
#include
#include
using
namespace
std;
/*x=1 a=b a>=b+0 且 b>=a+0
x=2 a<=b-1 b>=a+1
x=3 a>=b a>=b+0
x=4 a>=b+1 a>=b+1
x=5 a<=b b>=a+0
另 a>0 a>=1
若進不去d[y]=d[x]+k 滿足上述條件
*/typedef
long
long ll;
struct node
a[510000];int len,last[210000];
void ins(int x,int y,ll c)
ll d[210000];
int ru[210000];
bool v[210000];
int sta[1110000];
int n,k,st,top;
int main()
if(op==2)
ins(a,b,1);
}if(op==3)ins(b,a,0);
if(op==4)
ins(b,a,1);
}if(op==5)ins(a,b,0);
}top=0;
for(int i=1;i<=n;i++)d[i]=1;
for(int i=n;i>=1;i--)sta[++top]=i;
memset(v,true,sizeof(v));
memset(ru,0,sizeof(ru));
bool bk=false;
while(top)
if(v[y]==false)}}
}if(bk==true)
else
return
0;}
bzoj2330糖果(差分約束)
題目描述 幼兒園裡有n個小朋友,lxhgww老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果的時候,lxhgww需要滿足小朋友們的k個要求。幼兒園的糖果總是有限的,lxhgww想知道他至少...
BZOJ 2330 差分約束系統
差分約束系統是用最短路的三角不等式來得到題目中給定的不等式的一組解,具體來說,最短路中的不等式為if dis v dis u len p dis v dis u len p 假設題目中給定不等式a b 5,那麼轉換的不等式即為if dis a dis b 5 dis a dis b 5,這樣就把數學...
BZOJ 2330 差分約束系統
傳送門 差分約束這裡做個簡單介紹 形如 x i x j d 的不等式,可以聯想到我們求最短路時 d v d u len 則上式可以變形為 x i x j d 即連一條j i的長度為d的邊並跑最長路,dis i 則是滿足條件的最小解 因為上面等式採用的 號,所以求出的時最小解,同理當變形為 x j x...