POJ 1364 King 差分約束第一題

2022-02-14 01:48:58 字數 1080 閱讀 9899

題意:求給定的一組不等式是否有解,不等式要麼是:sum(xi) (a<=i<=b) > k (1) 要麼是 sum(xi) (a<=i<=b) < k (2)

分析:典型差分約束題,變換,令ti = sum(xj) (0<=j<=i).  則表示式(1)可以看做t(a+b)-t(a-1) > k,也就是t(a-1)-t(a+b) < -k,又因為全是整數,所以t(a-1)-t(a+b) <= -k-1.  同理,(2)看做t(a+b)-t(a-1) <= k-1.這樣就化成了差分約束系統的題了。

在差分約束系統中,xi - xj <= k 的表示式建邊為 = k.

不存在這個序列的情況即為出現負環,所以這題建圖後只需判斷有無負環即可。這裡用bellman-ford演算法判負環

注意:(1)a-1有可能為0,a+b有可能為n,所以如果按頂點來遍歷邊的話有n+1個頂點(0~n)。

(2)建的圖可能不連通,可以通過附加點來使圖聯通,即令dis = 。相當於每個點都與乙個附加點vs相連,且邊權為0.

**:

#include #include 

#include

#include

#include

#define mod 1000000007

using

namespace

std;

#define n 107

struct

edge

g[n];

inthead[n],tot;

intdis[n];

intn,m;

void addedge(int u,int v,int

w)bool

bellman_ford()}}

for(j=0;j<=n;j++)

}return

true;}

intmain()

if(!bellman_ford())

puts(

"successful conspiracy");

else

puts(

"lamentable kingdom");

}return0;

}

view code

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