思路:設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演算法判斷是否存在負圈就行了。
1 #include2 #include3 #include4 #include5#define maxn 1100
6#define inf 1<<30
7using
namespace
std;
8int
dis[maxn],vi[maxn],n,index[maxn],e;
9struct
edgeedge[maxn*1000
];12
void addedge(int
from, int to, int
val)
1320
void
init()
2129
intbellman_ford()
3044}45
if(flag)
46return1;
47}4849
return0;
50}51int
main()
5267
if(bellman_ford())
68 printf("
lamentable kingdom\n");
69else
70 printf("
successful conspiracy\n");
71}72return0;
73 }
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 差分約束
題意 給出乙個數字序列 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...