UVA11478 Halum 差分約束系統

2021-09-08 04:23:12 字數 1052 閱讀 9213

給定乙個有向圖,每條邊都有乙個權值。每次你可以選擇乙個結點v和乙個整數d,把所有以v為終點的邊的權值減小d,把所有以v為起點的邊的權值增加d,最後讓所有邊的權值的最小值大於零且盡量大。

該死書上翻譯錯了 >0不是非負 wa好幾次因為這個

考慮每條邊的約束,di表示i的halum量

w-dv+du>0

dv-du

但求解這個差分約束系統只是讓這組不等式成立,最長路和最短路控制的都是單個d的最值而不是最小值最大

那如何最小值最大呢?

二分答案......

那麼不等式變為dv-du

無解的話就是mid=1,無界的話就是mid=最大邊權(不能用1e9,溢位)的時候也成立

#include #include 

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int n=505,m=3005,inf=1e9;

inline

intread()

while(c>='

0'&&c<='9')

return x*f;

}int

n,m,u,v,w;

struct

edgee[m];

int h[n],cnt=0

;inline

void ins(int u,int v,int

w)int

q[n],head,tail,inq[n],num[n],d[n];

inline

void lop(int &x)

bool spfa(int

mid)}}

}return

false;}

intmain()

else

if(!spfa(r))

else

printf(

"%d\n

",ans);}}

}

UVA 11478 Halum 差分約束

題目大意 給定乙個有向圖,每條邊都有乙個權值,每次你可以選擇乙個結點v和整數d,把所有以v為終點的邊權值減少d,把所有以v為起點的邊權值增加d,最後要讓所有的邊權值非負且最大。思路 為了做這題前面先做了好幾題差分約束的。作者思路很巧妙 不同的操作互不影響,因此可以按任意的順序實施這些操作,另外,對於...

UVA 11478 差分約束 二分)

題意 給定乙個有向圖,每條邊都有乙個權值,每次你可以選擇乙個結點和乙個整數的,把所有以v為終點的邊的權值減去d,把所有以v為起點的邊的權值加上d 最後要讓所有邊的權的最小值非負且盡量大 include include include include include includeusing name...

uva515 差分約束

題目的意思就是就是求問是否存在滿足條件的序列 就是指 從 開始加,往後在加兩個 就是指 這是一道 差分約束 模板題,這裡就不具體說差分約束了 給大家乙個部落格 include includeconst int inf 0x3f3f3f3f const int n 220 int u n int v ...