日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【BZOJ2300】【SCOI2011】糖果

發布時間:2023/12/10 编程问答 76 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【BZOJ2300】【SCOI2011】糖果 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

差點就忘了還有差分約束這個東西……看見了就要學習一個

原題:

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

N<=100000,K<=100000,1<=A, B<=N

?

差分約束模板題,學習一個!

以操作3為例,如果a不少于b,那么a-b>=0,a>=b+0

所以連b到a權值為0的邊,根據三角形不等式,要跑最長路來使條件滿足

具體原理我也想不太清楚,反正記住搞出三角形不等式后跑符號相反的spfa就對了?_(:3 」∠)_

因為寫出了像"q[tl]=false"醬sb的東西+沒對拍所以沒1A……

注意longlong

代碼:

1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 using namespace std; 7 int rd(){int z=0,mk=1; char ch=getchar(); 8 while(ch<'0'||ch>'9'){if(ch=='-')mk=-1; ch=getchar();} 9 while(ch>='0'&&ch<='9'){z=(z<<3)+(z<<1)+ch-'0'; ch=getchar();} 10 return z*mk; 11 } 12 struct ddd{int nxt,y,v;}e[210000]; int lk[110000],ltp=0; 13 inline void ist(int x,int y,int z){ e[++ltp].nxt=lk[x],lk[x]=ltp,e[ltp].y=y,e[ltp].v=z;} 14 int n,m; 15 int dstc[110000],cnt[110000]; 16 int q[110000],hd=0,tl=0,tp=100001; bool vstd[110000]; 17 bool spfa(){ 18 memset(vstd,0,sizeof(vstd)); 19 //memset(dstc,0,sizeof(dstc)); 20 for(int i=1;i<=n;++i) q[++hd]=i,dstc[i]=1; 21 while(tl!=hd){ 22 tl=(tl==tp ? 0 : tl+1); 23 for(int i=lk[q[tl]];i;i=e[i].nxt)if(dstc[q[tl]]+e[i].v>dstc[e[i].y]){ 24 dstc[e[i].y]=dstc[q[tl]]+e[i].v; 25 if(++cnt[e[i].y]==n) return false; 26 if(!vstd[e[i].y]) q[hd=(hd==tp ? 0 : hd+1)]=e[i].y,vstd[e[i].y]=true; 27 } 28 vstd[q[tl]]=false; 29 } 30 return true; 31 } 32 int main(){//freopen("ddd.in","r",stdin); 33 cin>>n>>m; 34 int mk,l,r; 35 while(m--){ 36 mk=rd(),l=rd(),r=rd(); 37 if(mk==1) ist(l,r,0),ist(r,l,0); 38 else if(mk==2){ 39 if(l==r){ cout<<-1<<endl; return 0;} 40 ist(l,r,1); 41 } 42 else if(mk==3) ist(r,l,0); 43 else if(mk==4){ 44 if(l==r){ cout<<-1<<endl; return 0;} 45 ist(r,l,1); 46 } 47 else if(mk==5) ist(l,r,0); 48 } 49 if(!spfa()){ cout<<-1<<endl; return 0;} 50 long long ans=0; 51 for(int i=1;i<=n;++i) ans+=dstc[i]; 52 cout<<ans<<endl; 53 return 0; 54 } View Code

?

轉載于:https://www.cnblogs.com/JSL2018/p/6539363.html

總結

以上是生活随笔為你收集整理的【BZOJ2300】【SCOI2011】糖果的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。