一道條件非常多的差分約束
把\( 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表示地圖外一點,當一根柱子能跳到地圖外...