UESTC 1511 糖果 差分約束系統

2021-06-16 17:17:14 字數 1052 閱讀 6064

題意還是比較耿直的,給你n個點,m組不等式關係,求滿足條件的最小解顯然是用差分約束系統來解。增加原點0,權值為0.題目要求每個小朋友都必須分到糖果,也就是d[i][0] = 1。

但這個題卻不能用傳統的spfa來解。比如一下三個不等式:a>b b>c a>c;如果用最短路來解,假設d[a] = 1;那麼鬆弛出來的d[c]必然會是1(a>c)。而根據題意(a>b b>c),顯然b

將出現無解的情況。要使乙個節點的權值滿足所有與其相關的不等式,必須用最長路來解這個題!那麼三角不等式就變成了d[v] >= d[u] + dist[u][v]。然後就是按題意建圖,從原點跑spfa,最後ans = sum[d]。

#include#include#include#include#include#include#include#include#include#include#include#define ff(i, a, b) for(int i=a; ib; i--)

#define rep(i, n) for(int i=0; iedges;

vectorg[maxn];

bool inq[maxn], flag;

int cnt[maxn];

ll d[maxn];

void add(int from, int to, int dist)

); int m = edges.size();

g[from].push_back(m-1);

}void init()

bool spfa()}}

}return false;

}void solve()

ll ret = 0;

ff(i, 1, n+1) ret += d[i];

printf("%lld\n", ret);

return ;

}int main()

else if(x == 3)

else if(x == 4)

else add(a, b,0);

}solve();

}return 0;

}

差分約束 糖果

幼兒園裡有 n 個小朋友,老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果的時候,老師需要滿足小朋友們的 k 個要求。幼兒園的糖果總是有限的,老師想知道他至少需要準備多少個糖果,才能使得每...

差分約束 糖果

幼兒園裡有 nn 個小朋友,老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果的時候,老師需要滿足小朋友們的 kk 個要求。幼兒園的糖果總是有限的,老師想知道他至少需要準備多少個糖果,才能使...

差分約束 糖果

幼兒園裡有n個小朋友,lxhgww老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果的時候,lxhgww需要滿足小朋友們的k個要求。幼兒園的糖果總是有限的,lxhgww想知道他至少需要準備多...