POJ 1364 King 差分約束

2022-05-28 12:54:08 字數 972 閱讀 3125

題意: 知道了乙個序列a[1]..a[n] ,給出 m 個約束條件,

① st  sn  gt ki  表示a[st]+a[st+1]+..a[st+sn]>ki

② st  sn  lt  ki  表示a[st]+a[st+1]+..a[st+sn]問是否存在這樣的 a[i] 序列。

分析: 將上面的兩個不等式等價轉換建立差分約束系統

將 ① 變為s[st-1]-s[st+en] < -ki <=-ki-1

將 ② 變為s[st+en]-s[st-1] < ki <=ki-1

求解這個差分約束系統,看最後有無衝突

//

gt dis[s[i].en]-dis[s[i].st-1]<=ki-1

//lt dis[st]-dis[en]<=-ki-1

#include#include

#define clr(x)memset(x,0,sizeof(x))

struct

node

q[105

];int dis[105

];int k[105

];int

main()

else

}clr(dis);

for(i=1;i<=n;i++)

for(j=0;j)

if(dis[q[j].en]>dis[q[j].st]+k[j])

dis[q[j].en]=dis[q[j].st]+k[j];

for(i=0;i)

if(dis[q[i].en]>dis[q[i].st]+k[i])

break

;

if(i!=m)

printf(

"successful conspiracy\n");

else printf("

lamentable kingdom\n");

}return0;

}

poj 1364 King 差分約束

注意差分約束只能求 或 spfa判斷有無負權迴路。對於差分不等式,a b c 建一條 b 到 a 的權值為 c 的邊,求的是最短路,得到的是最大值 對於不等式 a b c 建一條 b 到 a 的權值為 c 的邊,求的是最長路,得到的是最小值。存在負環的話是無解,求不出最短路 dist 沒有得到更新 ...

poj 1364 King 差分約束

題目大意 有乙個序列。給定一些約束條件,格式為si ni oi ki,意思是序列中第si項到第si ni項的和 或 ki,oi表示 用 gt 表示 或 用 lt 表示 問這樣的序列是否存在。存在輸出 lamentable kingdomi 否則輸出 successful conspiracy 思路 ...

POJ1364 King 差分約束

鏈結 poj1364 題目大意 給你n和m,以及m個約束條件,對於每個約束條件給出si,ni,oi,ki,求是否有乙個n個元素的序列a能滿足這些約束條件。其中oi可以分別表示為gt 和lt 約束條件的定義為as i as i 1 as i ni ki 或asi asi 1 asi ni。解題報告 了...