這題的建圖方式可以模擬洛谷p1251
我是由那個題才想到這麼建的,由於每條邊至少經過一次,我們又不清楚需要跑多少次,把邊看成點,點與匯點相連,可是我們又不知道最大流應該是多少,直接這麼連會發生錯誤。利用那道題的思想,每條邊最少需要一次,那麼就每條邊看做兩個點,點1和點2,點1有1的流量流向匯點,點2接受源點的1的流量,這是乙個補流的過程。利用補流的過程和把邊拆成兩個點,我們就可以跑出來最大流是邊數的最小費用。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ui unsigned int
//ios::sync_with_stdio(false);
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)
#define ull unsigned long long
#define endd puts("");
#define re register
#define endl "\n"
#define ll long long
#define double long double
#define il inline
using
namespace std;
#define pi 3.1415926535898
const
double eqs =
1e-6
;const
long
long max_ =
1000000+7
;const
int mod =
1e9+7;
const
int inf =
1e9+7;
const
long
long inf =
2e18+7
;inline
intread()
while
(ch >=
'0'&&ch <=
'9')
return s * f;
}inline
void
write
(int x)
if(x >9)
write
(x /10)
;putchar
(x %10+
'0');}
int head[max_]
, xiann =2;
struct kk kk(
int to,
int next,
int flow,
int val):to
(to)
,next
(next)
,flow
(flow)
,val
(val)
}xian[max_ <<1]
;il void
add(
int a,
int b,
int c,
int d)
*/ xian[xiann]=kk
(b, head[a]
, c, d)
; head[a]
= xiann;
xiann++;}
int cur[max_]
, dis[max_]
, n =
0, que[max_]
, l, r;
int s, t;
bool vis[max_]
;bool
spfa()
l =1, r =0;
que[
++r]
= s; vis[s]=1
; dis[s]=0
;while
(l <= r)}}
}return dis[t]
!= inf;
}int mincost, maxflow;
intdfs
(int now,
int flow)
} vis[now]=0
;return tot;
}void
dinic()
}il void
addedge
(int a,
int b,
int c,
int d)
vector
int,
int>
> ask[
700]
;map<
int, pair<
int,
int>
>mp;
il void
ini()}
s =0; n = t =
++idn;
addedge
(s,1
, inf,0)
;for
(i =
1; i <= n; i++)}
dinic()
; cout << mincost;
}signed
main()
洛谷P4043 支線劇情
題意 給定dag,通過每條邊需要時間。從某號點回到1號點不需要時間。從1號點出發,求最少要多久才能走完所有邊。解 有源匯有上下界最小費用可行流。直接連邊,費用為時間,下界為1,無上界。每個點都可能是終點,往t連邊。1 include 2 include 3 include 4 include 5 6...
最小費用流 洛谷P2053
傳送門 教練我想學數學建模。網路流和最小費用流的題目不存在 難度,不存在變形 目前來說是的,不知道是不是我沒做過對於模板修改的題目 難度主要在於,你能看出來它是個網路流,並且還能正確的建模。大喊一句,教練我想學數學建模!這個題目建模不是很簡單。首先,我們要知道乙個人可以修n輛車,那麼m個人就可以修n...
洛谷P3965 迴圈格 費用流
乙個完美的迴圈格是這樣定義的 對於任意乙個起始位置,你都可以沿著箭頭最終回到起始位置。如果乙個迴圈格不滿足完美,你可以隨意修改任意乙個元素的箭頭直到完美。例如下圖,左邊不是乙個完美的迴圈格,因為只有從 1,1 1,2 2,0 2,3 1,1 1,2 2,0 2,3 1,1 1,2 2 0 2,3 出...