題意還是比較耿直的,給你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想知道他至少需要準備多...