【bzoj 2330】[SCOI2011]糖果 差分約束
連差分約束不知道是什麼的:http://www.cnblogs.com/void/archive/2011/08/26/2153928.html
假設 需要滿足條件:
b-a<=k1 (1)
c-b<=k2 (2)
c-a<=k3 (3)
(1)(2)相加 得到不等式c-a<=k1+k2
所以要使條件滿足的首要條件就是c-a<=min(k1+k2,k3) 但是可能題目中會有多個條件,不過本質並不會改變,依舊是求最小值,那麼我們將a,b,c為點,以k為邊權建邊,得到一個有向圖,求最短路就得到了min;
注意:1.最少每個人分到一個糖果從0填邊的時候邊權為1,而且要從後面向前填邊
2.最終ans用long long存
#include<cstdio> #include<cstring> #define maxn 100020 #include<iostream> #include<queue> #define LL long long using namespace std; queue<int >q; int n,m,head[maxn*2],tot,vis[maxn],dis[maxn],times[maxn]; struct edge{ int v,w,next; }e[maxn*4]; void adde(int a,int b,int c){e[tot].v=b,e[tot].w=c,e[tot].next=head[a];head[a]=tot++;} bool spfa(){ q.push(0),dis[0]=0,times[0]=1; while(!q.empty()){ int u=q.front();q.pop() ; vis[u]=0; for(int i=head[u];i!=-1;i=e[i].next ){ int v=e[i].v ,w=e[i].w; if(dis[v]<dis[u]+w){ dis[v]=dis[u]+w; times[v]++; if(times[v]>=n)return false; if(!vis[v]){ vis[v]=1; q.push(v); } } } } return true; } int main(){ memset(head,-1,sizeof(head)); scanf("%d%d",&n,&m); for(int pos,b,a,i=1;i<=m;i++){ scanf("%d%d%d",&pos,&a,&b); if(pos==1){adde(a,b,0),adde(b,a,0);} else if(pos==2){ if(a==b){printf("-1");} adde(a,b,1); }else if(pos==3){ adde(b,a,0); }else if(pos==4){ if(a==b){printf("-1");return 0;} adde(b,a,1);break; }else if(pos==5){ adde(a,b,0); } } for(int i=n;i>=1;i--)adde(0,i,1); if(!spfa()){printf("-1");return 0;} LL ans=0; for(int i=1;i<=n;i++) ans+=(LL)dis[i]; printf("%lld",ans); return 0; }/* 5 7 1 1 2 2 3 2 4 4 1 3 4 5 5 4 5 2 3 5 4 5 1 */
相關推薦
【bzoj 2330】[SCOI2011]糖果 差分約束
連差分約束不知道是什麼的:http://www.cnblogs.com/void/archive/2011/08/26/2153928.html 假設 需要滿足條件: b-a<=k1 (
【題解】洛谷P3275(bzoj2330)[SCOI2011]糖果 差分約束
題目連結 設每個小朋友得到的糖果數為 ccc {x=1ca−cb≥0且cb−ca≥0x=2cb−ca≥1x=3ca−cb≥0x=4ca−cb≥1x=5cb−ca≥0\begin{cases}x=1\quad c_a-c_b\geq0且c_b-c_a\geq
BZOJ 2330 SCOI2011 糖果 差分約束
題目大意:給定n個點和之間的大小關係,求每個點最少是多少(必須大於0) 差分約束系統,按照題目說的連邊即可,記住少於和不少於的大小關係是不一樣的 邊集要開3倍 此外注意的是0到i的連邊要從後往前連 不然TLE 坑B資料逗死我了 #include<queue> #
bzoj 2330: [SCOI2011]糖果 差分約束系統
題意:幼兒園裡有N個小朋友,lxhgww老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果
BZOJ 2330 [SCOI2011]糖果 差分約束系統
#include <cstdio> #include <cstring> #include <queue> #define N 100005 using namesp
2330: [SCOI2011]糖果 (差分約束系統)
#include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cm
【POJ 1201】 Intervals(差分約束系統)
sub 代碼 idt ear ces oid std one space 【POJ 1201】 Intervals(差分約束系統) 11 1716的升級版 把原本固定的邊權改為不固定。 Intervals Time Limit: 2000MS Memor
[BZOJ2330][SCOI2011]糖果 差分約束系統+最短路
題目中的 con blog problem 鏈接 cst pop zoj inline 題目鏈接:http://www.lydsy.com/JudgeOnline/problem.php?id=2330 類似於題目中這種含有不等式關系,我們可以建立差分約束系統來跑最長路或
洛谷P3275 [SCOI2011]糖果 [差分約束系統]
c++ mes line blank num problem 輸入輸出格式 分析 reg 題目傳送門 糖果 題目描述 幼兒園裏有N個小朋友,lxhgww老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如
[BZOJ2330] [SCOI2011] 糖果 [差分約束][單源最短路][縮點][拓撲排序]
link SPFA 題目要求求最小值。 建原點0\mathfrak{0}0,也就是要∑dis[x]−dis[0]\mathfrak{\sum{dis[x]-dis[0]}}∑dis[x]−dis[0] 最小。 最小值受到dis[x]−dis[0]≥val[x
BZOJ2330 [SCOI2011]糖果 差分約束模板
很久以前學的差分約束,基本忘了,複習一下 a<=b+c,ins(b,a,c)是最短鏈,每個元素最大 a>=b+c,ins(b,a,c)是最長鏈,每個元素最小 #include<bits/stdc++.h> #pragma comment(link
【POJ 3159】 Candies(差分約束系統)
During the kindergarten days, flymouse was the monitor of his class. Occasionally the head-teacher brought the kids of flymouse’s class a large bag of can
【BZOJ2330】【SCOI2011】糖果——差分約束系統+tarjan
題目連結 差分約束 這是一道經典的差分約束問題 我們假設最後第i個小朋友分得的糖果數為ai,ai∈N∗ 那麼對於約束條件:i分得的糖果少於j的,有ai<aj,由於ai是整數,可以變形為ai⩽aj+(−1) 同樣,對於ai⩽aj也可以看成a
BZOJ[2330]糖果 差分約束
Description 幼兒園裡有N個小朋友,lxhgww老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果的時候,lxhgww需要滿足小朋友們的
bzoj 2330 糖果 差分約束
#include<iostream> #include<cstdio> #include<queue> using namespace std; struct bia
【BZOJ 1045】 [HAOI2008] 糖果傳遞
lac efi source span 遞推 所有 ret clu long 【鏈接】 我是鏈接,點我呀:) 【題意】 在這裏輸入題意 【題解】 思路來自hzwer.. 設xi表示第i個人往左傳遞了xi個糖果。 (如果小於0表示旁邊的人給他了糖果。 則ans
【POJ3169】Layout(差分約束系統+SPFA)
題目連結 Layout Time Limit: 1000MS Memory Limit: 65536K Total Submissions:14919 Accepted: 7183 Description Like everyone
bzoj2330糖果——差分約束
{} 什麽 bool href ble AR pre max 題目 題目:https://www.lydsy.com/JudgeOnline/problem.php?id=2330 差分約束,再建立一個源點0,向所有點連邊權為1的邊,表示每個人都會分到糖果; 答案較大,需要
BZOJ 1202 狡猾的商人 差分約束or帶權並查集
!= pre false 其中 png 超時 差分約束 樹根 cto 題目鏈接: https://www.lydsy.com/JudgeOnline/problem.php?id=1202 題目大意: 刁姹接到一個任務,為稅務部門調查一位商人的賬本,看看賬本是不是偽造的。賬
分糖果 差分約束
Description 幼兒園裡有N個小朋友,lxhgww老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖