【題目背景】
小k是個特麼喜歡玩mc的孩紙。。。【題目描述】
小k在mc裡面建立很多很多的農場,總共n個,以至於他自己都忘記了每個農場中種植作物的具體數量了,他只記得一些含糊的資訊(共m個),以下列三種形式描述:農場a比農場b至少多種植了c個單位的作物,農場a比農場b至多多種植了c個單位的作物,農場a與農場b種植的作物數一樣多。但是,由於小k的記憶有些偏差,所以他想要知道存不存在一種情況,使得農場的種植作物數量與他記憶中的所有資訊吻合。【輸入格式】
第一行包括兩個整數n和m,分別表示農場數目和小k記憶中的資訊的數目接下來m行:如果每行的第乙個數是1,接下來有三個整數a,b,c,表示農場a比農場b至少多種植了c個單位的作物如果每行第乙個數是2,接下來有三個整數a,b,c,表示農場a比農場b至多多種植了c個單位的作物如果每行第乙個數是3,接下來有兩個整數a,b,表示農場a種植的數量與b一樣。1<=n,m,a,b,c<=10000【輸出格式】
如果存在某種情況與小k的記憶吻合,輸出」yes」,否則輸出」no」【樣例輸入】
3 3【樣例輸出】3 1 2
1 1 3 1
2 2 3 2
yes【樣例解釋】
三個農場種植的數量可以為(2,2,1)【題目解析】
這道題是典型的差分約束系統,差分約束系統聽起來特別高大上。
如果乙個系統由n個變數和m個約束條件組成,形成m個形如ai-aj≤k的不等式(i,j∈[1,n],k為常數),則稱其為差分約束系統(system of difference constraints)。亦即,差分約束系統是求解關於一組變數的特殊不等式組的方法。(來自度娘)
我們處理起來分兩步:
1.建圖:
農場a比農場b至少多種植了c個單位的作物,我們可以簡單的寫a-b>=c,那麼我們add(a,b,-c),b是子節點,-c是邊權,那麼很好理解,a點到b點的代價是-c。我是這麼理解的:a農場到b農場得減少c個農作物,這樣,a農場的農作物的數量就和b農場一樣了,從某種意義上講,它就變成了b農場,到達了b農場。
農場a比農場b至多多種植了c個單位的作物,那我們簡單的寫a-b<=c,轉換一下,b-a>=-c,那麼我們add(b,a,c),理解如上。
相同就最好處理了,add(a,b,0)
2.判負環
我們用dfs版的spfa來處理
很好理解,因為spfa是求最短路,我們用dfs一路扎(遍歷)下去,把一路扎過的點標記一下,那麼如果我們又扎了回來,我們肯定陷入了乙個環裡,那麼就是不合法的,相當於你不停走這個環,最短路越來越小。(dfs來判環真的方便啊!!!雖然我理解了好久qwq)
下面附上我的**:
#include
#define maxn 10005
using namespace std;
bool ***,vis[maxn];
int n,e,tot,w[maxn],lnk[maxn],net[maxn],son[maxn],dis[maxn];
inline int
read()
while (ch>='0'&&ch<='9') ret=ret*10+ch-'0',ch=getchar();
return ret*f;
}inline void add(int
x,int
y,int z)
inline void dfs(int
x)//發現扎回來了,就有問題了。
dis[son[j]]=dis[x]+w[j];
dfs(son[j]);}}
vis[x]=0;
}int main()
if (knd==2)
if (knd==3)
}for (int i=1;i<=n;i++)
if (***) printf("no\n");else
printf("yes\n");
return
0;}
BZOJ 3436 小k的農場(差分約束)
description 背景 小k是個特麼喜歡玩mc的孩紙。描述小k在mc裡面建立很多很多的農場,總共n個,以至於他自己都忘記了每個農場中種植作物的具體數量了,他只記得一些含糊的資訊 共m個 以下列三種形式描述 農場a比農場b至少多種植了c個單位的作物,農場a比農場b至多多種植了c個單位的作物,農場...
BZOJ 3436 小K的農場 差分約束
原題鏈結 背景小k是個特麼喜歡玩mc的孩紙。描述小k在mc裡面建立很多很多的農場,總共n個,以至於他自己都忘記了每個農場中種植作物的具體數量了,他只記得 一些含糊的資訊 共m個 以下列三種形式描述 農場a比農場b至少多種植了c個單位的作物,農場a比農場b至多 多種植了c個單位的作物,農場a與農場b種...
BZOJ3436 小K的農場
差分約束系統。分析一下三種情況 1.農場a aa比農場b bb至少多種植了c cc個單位的作物 即a b c b a ca geq b c b leq a c a b c b a c,a aa向b bb連一條長度為 c c c的單向邊。2.農場a aa比農場b bb至多多種植了c cc個單位的作物。...