POJ 1364 King (差分約束)

2021-09-06 09:35:33 字數 884 閱讀 3191

超級傳送門

題目大意:

有乙個序列s[1], s[2],s[3],s[4].....

讀入si,ni,oi,ki,

oi表示大於和小於,如果是gt,則是大於,如果是lt,則是小於

輸入表示 s[si]到s[si+ni]的和 大於/小於 ki

即:t[si+ni]-t[si-1]>ki(oi為gt) 等價於:t[si-1]-t[si+ni]<-ki

t[si+ni]-t[si-1](oi為lt)

典型的差分約束,但是裡面有乙個小技巧,差分約束只能處理小於等於和大於等於的情況,在本題中,因為序列都是整數,可以轉化為:

t[si-1]-t[si+ni]<-ki

-1(oi為gt)

t[si+ni]-t[si-1]<=ki-1(oi為lt)

ac**如下:

/*poj1364

2013-05-10*/

#includeusing namespace std;

#includestruct edgeedge[105];//存放邊的結構體陣列

int dis[105];//到源點距離表

int m;//邊的數目

int n;//點的個數

void createedge(int num,int u,int v,int w)

bool bellman()

} }//檢查負權迴路

for(k=0;kedge[k].w+dis[edge[k].u])

} return true;

}int main(){

char oi[3];

int si,ni,ki,i;

while(cin>>n,n){

cin>>m;

for(i=0;i

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。解題報告 了...