題意:
給出乙個數字序列 s=,它有 m 個子序列 si=,現在給出 m 個限制條件:第 i 個子序列的和 < ki 或 第 i 個子序列的和 > ki
思路:
標準的差分約束,用s
is_i
si表示a1+
a2..
.+ai
a_1+a_2...+a_i
a1+a2
...
+ai
的值,並且s0=
0s_0=0
s0=
0,所有s
is_i
si滿足s
i>=0
s_i>=0
si>=0
,然後再加上題中的限制條件就可以建圖了,用bellman求最短路判斷是否有負環就可以。
**:
#include
#include
#include
#include
//#include
#define mset(a,b) memset(a,b,sizeof(a))
using
namespace std;
typedef
long
long ll;
typedef pair p;
const
int inf=
0x3f3f3f3f
;int dis[
110]
;struct nodeedge[
110]
;bool
bellman
(int x,
int n,
int m)}}
if(update)
else
return
true;}
intmain()
else}if
(bellman(0
,n+1
,m))
else
cout<<
"successful conspiracy"
<}return0;
}
POJ 1364 差分約束
解題的思路比較奇葩。第一次見到啊,也不知道別人是怎麼看出來這種情況下就是差分約束也就是可以用到圖論,表示真的好迷啊。看來對差分約束的概念還很差呢。include include include include includeusing namespace std const int maxn 100...
POJ 1364 差分約束
思路 把所有 變成 把所有 加一減一就好了 然後我們發現 圖不一定連通!怎麼辦呢 對於每乙個連通塊spfa就好了嘛 by siriusren include include include include define n 111 using namespace std char a 3 inq n...
poj 1364 差分約束
思路 設dis i 為從0點到第i點的序列總和。那麼對於a b gt k 來講意思是dis b a dis a k 對於a b lt k來講就是dis b a dis a dis a dis b a k 1 dis a b dis a k 1 那麼就可以根據公式來建邊了,用bellman ford演...