去題面的傳送門
對於題目中的各種條件:
① a=b 建邊a–>b=0,b–>a=0
②a>=b 建邊 b–>a=0
③a>b 建邊b–>a=1
為什麼呢?
因為要求最少糖果數,那麼對於a=b和a>=b的情況,就都讓它們相差的最少,就是0,對於a>b,差的最少就是1,所以建邊為1.
由於糖果數量最少的人的糖果至少也得有乙個,所以建乙個超級原點,到所有點的權值為1,然後跑最長路。因為對於乙個學生的糖果數量,要盡可能滿足所有人的要求。如果存在最長路,那麼該同學的糖果數就能更滿足其他較短路上的人的要求,所以最長路實際上求的是最小值。
不滿足條件的情況,就是形成了正環。所以spfa判一下正環就好了
**:
#include
#include
#include
#include
#include
using
namespace
std;
const
long
long maxn=200000+10;
long
long n,k,cnt,ans;
long
long fist[maxn],tot[maxn],nxt[maxn<<1],dis[maxn];
bool vis[maxn];
struct hh
e[maxn<<1];
deque
long>q;
void build(long
long f,long
long t,long
long v)
; nxt[cnt]=fist[f];
fist[f]=cnt;
}bool spfa()
}if(tot[v]>=n+3) return
false;}}
return
true;
}int main()
for(long
long i=1;i<=n;++i) build(n+1,i,1);
if(!spfa()) printf("-1");
else
return
0;}
luogu 3275 題解 糖果 差分約束
題面 大意 emmmmmmmm看到題面就知道真的不好總結。差分約束的裸題。將各類關係建成不同的邊。當op為1的時候,建乙個雙向邊權值為0 為2的時候,建立從a到b權值為1的邊 為3的時候,建立從b到a權值為0的邊 為4的時候建立從b到a權值為1的邊 為5的時候建立從a到b權值為0的邊 然後直接跑sp...
差分約束 糖果
幼兒園裡有 n 個小朋友,老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果的時候,老師需要滿足小朋友們的 k 個要求。幼兒園的糖果總是有限的,老師想知道他至少需要準備多少個糖果,才能使得每...
差分約束 糖果
幼兒園裡有 nn 個小朋友,老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果的時候,老師需要滿足小朋友們的 kk 個要求。幼兒園的糖果總是有限的,老師想知道他至少需要準備多少個糖果,才能使...