POJ 1364 King (差分約束系統)

2022-03-06 19:42:35 字數 978 閱讀 8229

題目描述有點複雜,前面講了一大堆廢話。

題目大意:對乙個含n個整數的序列進行一些約束:

1、整數序列中連續的一段的和大於某個整數;

2、整數序列中連續的一段的和小於某個整數。

問滿足以上約束的整數序列是否存在。

分析:首先利用字首和進行轉換,然後將》化為》=,將《化為<=,然後就基本是裸的差分約束系統了。

需要注意的是,建立的約束圖可能並不是無向連通的,所以需要另外加乙個結點作為源點,由於加了乙個點,所以判斷是否有負環時要注意,條件是某個點進隊次數大於n+1

view code

#include #include 

#include

using

namespace

std;

#define n 110

#define m 210

#define inf 0x3fffffff

intn,m;

intd[n];

intinq[n],cnt[n];

intfirst[n],v[m],next[m],w[m];

inte;

void

init()

void insert(int a,int b,int

c)void

spfa()

inq[a]=0

;

for(int i=first[a];i!=-1;i=next[i])}}

if(loop) puts("

successful conspiracy");

else puts("

lamentable kingdom");

}int

main()

else

}for(i=0;i<=n;i++) insert(n+1,i,0

); spfa();

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