題目鏈結
差分約束系統。
設\(s[x]\)表示從橫座標為0到橫座標為\(x\)的最少點數,所以求出\(s[maxn]\)就好了。(\(maxn\)為橫座標最大的數)
根據每個區間最少的點數,我們可以得到:\(s[y] - s[x - 1] >= c\);
另外還要是後面的大於等於前面的:\(s[i] - s[i - 1] >= 0\);
因為相鄰的最多隻差一,所以:\(s[i] - s[i - 1] <= 1\)。
還有:dij一定不能用在帶有負邊權的圖中!!!這道題只能用spfa。(我傻不愣登的調了一上午dij)
#include #include #include #include #define int long long
using namespace std;
inline long long read()
const int n = 5e5 + 5, inf = 1e9;
int n, maxn, minn, cnt;
int in[n], vis[n], dis[n], head[n];
struct edge e[n << 2];
void add(int x, int y, int z)
void run_dij() }}
}signed main()
for(int i = minn;i <= maxn; i++)
run_dij();
printf("%lld", dis[maxn]);
return 0;
}
差分約束 poj 1201 Interval
差分約束 poj 1201 又是一道vector tle。確實很好的差分約束。很好的差分約束,注意隱含條件 0 d i 1 d i 1 題目保證了沒負圈。include include include using namespace std define n 50005 define inf 100...
POJ 1201 樹狀陣列
給你n個區間,每個區間為 a,b 每個區間取c個數構成乙個集合,求集合最小容量 把區間按b排序,從第乙個區間開始取,從後往前取,這樣盡可能和後面的區間重複 另外如果我們發現當前區間取得個數已經超過了c,那麼只需要讓之前區間換就行,而總數是不變的,所以不用更新答案 求當前區間已經取了多少個數用樹狀陣列...
poj 1201 差分約束
傳送門 題意 ai到bi間至少有ci個元素,問所有數中至少有多少元素。額。這樣好像說不清楚,我拿樣例說下吧。3到7之間至少有3個元素,8到10之間至少有3個元素,6到8之間至少有1個元素,1到3之間至少有1個元素,10到11之間至少有1個元素。最少情況如下 1 2 3 4 5 6 7 8 9 10 ...