poj1364(差分約束系統)

2022-08-24 21:03:13 字數 1452 閱讀 4923

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 #include 

3 #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...