poj1364
設s[i] 表示a1 + a2 + ... + a(i-1)的和
給我們n個點,m條約束
如果是a b gt c 那麼表示 s[a+b+1] - s[a] > c ---> s[a] -s[a+b+1] <-c <=-c-1 --> s[a] <= s[a+b+1] + (-c-1)
如果是a b lt c 那麼表示 s[a+b+1] - s[a] < c ---> s[a+b+1] - s[a] <= c - 1 --> s[a+b+1] <= s[a] + (c-1)
題目要問我們是不是所有變數都滿足約束條件,如果滿足輸出lamentable kingdom, 如果不滿足,輸出successful conspiracy
滿不滿足約束條件, 即圖存不存在負權迴路。
1 #include 2 #include3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include
11 #include
12 #include 13
using
namespace
std;
14#pragma warning(disable:4996)
15 typedef long
long
ll;
16const
int inf = 1
<<30;17
/*18
s[a+b+1] - s[a] >c --> s[a] - s[a+b+1] < -c <= -c-1
19s[a+b+1] - s[a] s[a+b+1] -s[a] < c <= c-1
20不連通要我們求環
21*/
22struct
edge
23es[100+10
];26
int dist[100+10
];27
bool bellman_ford(int n, int
m)2841}
42for(int j=0; jj)
4348
return
true;49
}50intmain()
5167
else
6873}74
bool ret =bellman_ford(n,m);
75if
(ret)
76 puts("
lamentable kingdom");
77else
78 puts("
successful conspiracy");
79}80return0;
81 }
差分約束系統 POJ 1364
參考 html 所謂查分約束系統其實很簡單,就是全都是兩個未知數的差小於等於某個常數 大於等於 也可以,因為左右乘以 1就可以化成小於等於 的一系列方程組 ax p,a 1或 1 如 x1 x2 0 x1 x5 1 x2 x5 3 x3 x2 5 x4 x3 4 x4 x3 12 x5 x1 23 ...
POJ 1364(差分約束系統)
poj 1364 1 題意 有乙個序列長度為n,給出m次的約數,詢問這m次限定能否確定乙個序列。輸入n,m 然後m行,每行有四個引數si,ni,oi,ki 如果oi是gt就是 否則是 如果最後能確定乙個序列就輸出 lamentable kingdom 否則輸出 successful conspira...
POJ 1364 差分約束
解題的思路比較奇葩。第一次見到啊,也不知道別人是怎麼看出來這種情況下就是差分約束也就是可以用到圖論,表示真的好迷啊。看來對差分約束的概念還很差呢。include include include include includeusing namespace std const int maxn 100...