雖然蒜頭君並沒有多少錢,但是蒜頭君辦了很多張銀行卡,共有 nn 張,以至於他自己都忘記了每張銀行卡裡有多少錢了。
他只記得一些含糊的資訊,這些資訊主要以下列三種形式描述:
銀行卡 aa 比銀行卡 bb 至少多 cc 元。
銀行卡 aa 比銀行卡 bb 至多多 cc 元。
銀行卡 aa 和銀行卡 cc 裡的存款一樣多。
但是由於蒜頭君的記憶有些差,他想知道是否存在一種情況,使得銀行卡的存款情況和他記憶中的所有資訊吻合。
輸入格式
第一行輸入兩個整數 nn 和 mm,分別表示銀行卡數目和蒜頭君記憶中的資訊的數目。(1\leq n,m\leq 10000)(1≤n,m≤10000)
接下來 mm 行:
如果每行第乙個數是 11,接下來有三個整數 a, b, ca,b,c,表示銀行卡 aa 比銀行卡 bb 至少多 cc 元。
如果每行第乙個數是 22,接下來有三個整數 a, b, ca,b,c,表示銀行卡 aa 比銀行卡 bb 至多多 cc 元。
如果每行第乙個數是 33,接下來有兩個整數 a, ba,b,表示銀行卡 aa 和 bb 裡的存款一樣多。(1\leq n,m,a,b,c\leq 10000)(1≤n,m,a,b,c≤10000)
輸出格式
如果存在某種情況與蒜頭君的記憶吻合,輸出yes,否則輸出no。
樣例輸入
3 3
3 1 2
1 1 3 1
2 2 3 2
樣例輸出
差分約束+spfa
**:
#includeusing namespace std;
const int max_n=10010;
const int max_m=2*max_n;
int ss=0;
int n,m;
struct edgee[max_m];
int p[max_n],eid;
int dst[max_n];
int cnt[max_n];
bool inq[max_n];
int inf=0x3f3f3f3f;
void init()
void insert(int u,int v,int w)
int spfa(int s)
} }return 1;
}int main()else if(id==2)else
} for(int i=1;i<=n;i++)
if(spfa(ss))else
return 0;
}
差分約束系統
差分約束 若 s a s b k 建一條b到a 的長度為k的邊 若s a s b k 建一條b到a 的長度為 k的邊 是求最小值的最長路 是求最大值的最短路 注意到最短路演算法的鬆弛操作 if d j d i w i j d j d i w i j 這其中的三角形不等式 d j d i w i j ...
差分約束系統
差分約束系統 對於差分不等式,a b c 建一條 b 到 a 的權值為 c 的邊,求的是最短路,得到的是最大值 對於不等式 a b c 建一條 b 到 a 的權值為 c 的邊,求的是最長路,得到的是最小值 存在負環的話是無解 求不出最短路 dist 沒有得到更新 的話是任意解 第三 一種建圖方法 設...
差分約束系統
差分約束系統 x1 x2 0 x1 x5 1 x2 x5 1 x3 x1 5 x4 x1 4 x4 x3 1 x5 x3 3 x5 x4 3 不等式組 1 全都是兩個未知數的差小於等於某個常數 大於等於也可以,因為左右乘以 1就可以化成小於等於 這樣的不等式組就稱作差分約束系統。這個不等式組要麼無解...