POJ 1364 King 差分約束 找負環

2022-09-07 17:42:12 字數 881 閱讀 3151

嘛,雖然是一道水題+模板題,不過還是學到了很多東西的,記錄一下。

首先題目給出的不等式是小於,但是差分約束系統只能處理小於等於的情況,所以要轉化成小於等於的進行處理。對於整數處理方法非常簡單= =

然後是找負環的情況,其實不需要考慮圖連不連通,只要一開始就把所有的點的d置成0,然後都push進佇列裡面就好了。

ps:這種方法同樣可以用在處理多源點最短路問題上。

#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

typedef long long ll;

const int maxn = 105;

const int maxm = 5005;

int first[maxn],nxt[maxm],v[maxm],w[maxm];

int d[maxn],n,m,ecnt,cnt[maxn];

bool inq[maxn];

void adde(int _u,int _v,int _w)

void solve()

while(!q.empty() && !bad)

}d[v[i]] = d[x] + w[i];}}

}if(bad) puts("successful conspiracy");

else puts("lamentable kingdom");

}int main()

/*for(int i = 1;i <= n;i++)

*/solve();

}return 0;

}

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