題目大意;
已知乙個序列a[1], a[2], ……, a[n],給出它的若干子串行以及對該子串行的
約束條件,例如a[si], a[si+1], a[si+2], ……, a[si+ni],且a[si]+a[si+1]
+a[si+2]+……+a[si+ni] < or > ki。求是否存在滿足以上m個要求的數列。是
則輸出「lamentable kingdom」,否則輸出「successful conspiracy」。
解題思路:
s[a] + s[a+1] + …… + s[b] < c 可以轉化成前n項和sum[b] - sum[a - 1] < c,
為了能用bellman_ford,即將< 轉化成 <= ,sum[b] - sum[a - 1] <= c - 1。
轉化為最長路或者最短路來判斷是否有解都可以。
**:
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn =200+5;
const
int inf =0x3f3f3f3f;
int head[maxn],vis[maxn],d[maxn],cnt[maxn],k;
int n,m;
queue
q;void init()
struct edge
; edge(int v1,int w1,int next1)
}e[maxn*2];
void add_edge(int u, int v, int w)
int spfa()}}
}return1;}
int main()
else
}for(int i=0; i<=n; i++)//如果選擇0作為超級源點的話,d[0]可以一直變化,不恒為0
add_edge(n+1,i,0);
spfa() ?printf("lamentable kingdom\n"):printf("successful conspiracy\n");
}return
0;}
POJ 1364 差分約束
解題的思路比較奇葩。第一次見到啊,也不知道別人是怎麼看出來這種情況下就是差分約束也就是可以用到圖論,表示真的好迷啊。看來對差分約束的概念還很差呢。include include include include includeusing namespace std const int maxn 100...
POJ 1364 差分約束
思路 把所有 變成 把所有 加一減一就好了 然後我們發現 圖不一定連通!怎麼辦呢 對於每乙個連通塊spfa就好了嘛 by siriusren include include include include define n 111 using namespace std char a 3 inq n...
POJ 1364 差分約束
題意 給出乙個數字序列 s 它有 m 個子序列 si 現在給出 m 個限制條件 第 i 個子序列的和 ki 或 第 i 個子序列的和 ki 思路 標準的差分約束,用s is i si 表示a1 a2.ai a 1 a 2.a i a1 a2 ai 的值,並且s0 0s 0 0 s0 0,所有s is...