題解 洛谷P3275 SCOI2011 糖果

2022-05-01 21:18:09 字數 1249 閱讀 6146

一道條件非常多的差分約束

把\( a < b \)轉化為\( a-b \le -1\)就可做了

\( a>b \)的情況同理

若有負環則無解輸出-1

注意本題中要求每個人都有糖果

所以假設乙個源點\( d_ \),使\( d_-d_ \ge 1 \  , \ (1 \le i \le n) \)

另外,本題要求得是最小值

\( x_-x_ \le a_ \)的形式求出的是最大值

要轉化成 \( x_-x_ \ge a_ \)的形式求解最小值

每個人的最小值即為\( dis_ \),所以求和

因為和是負數,所以輸出-ans

ans會爆int

#include #include 

#include

#include

using

namespace

std;

const

int maxn = 100010

;const

int maxm = 500000

;int cnt=0

,u[maxm],v[maxm],w[maxm],first[maxn],next[maxm];

bool

vis[maxn];

intinq[maxn],dis[maxn],f[maxn];

intn,k;

void addedge(int ux,int vx,int

wx)bool spfa(int

s) }}}

return

true;}

intmain()

else

if(x==2

) }

else

if(x==3

)

else

if(x==4

) }

else

}for(int i=n;i>=1;i--)

addedge(

0,i,-1

);

if(!spfa(0

))

long

long ans=0

;

for(int i=1;i<=n;i++)

ans+=-dis[i];

printf(

"%lld

",ans);

return0;

}

題解 洛谷P3275 SCOI2011 糖果

題面 其實是裸的差分約束吧 qwq。對於每一種情況分類討論一下 這裡說一下差分約束最基本的建圖方式 如何求最值呢?結論 如果求的是最小值,那麼我們就跑一遍最長路 否則就跑一遍最短路。具體的方法就是對於每乙個 x i geq c 的條件,建立乙個超級源點 0 由 0 向 x i 連一條長度為 c 的邊...

P3275 SCOI2011 糖果 題解

一道差分約束的模板題。題目題意 n個人每個人至少乙個糖果,另外要滿足k個不等式,求最少糖果數。差分約束系統 給定一組不等式 x i x j c k 或 x i x j c k 需要求出滿足所有不等式的一組解 x 1 x 2 x n 這類問題是線性規劃的一類簡單問題。形式 通常表示為 ax c 或ax...

洛谷P2472 SCOI2007 蜥蜴 題解

這道題用最大流解決。首先構建模型。一根柱子可以跳入和跳出,於是拆成兩個點 入點和出點。每一根柱子的入點和出點連一條流量為高度的邊,來限制蜥蜴跳入的次數。當柱子a可以調到柱子b時,就從a的出點向b的入點連邊,流量inf。s向所有有蜥蜴的柱子的入點連邊,流量為1 t表示地圖外一點,當一根柱子能跳到地圖外...