題目大意:n個盒子圍成一圈,第i個盒子裡最開始有ai個球。每次可以把乙個小球移動到相鄰的盒子裡。問,想使每個盒子裡的球的數目不超過1個,最少移動多少次。
這個題還是比較簡單的。源點到每個盒子,連邊(s,i,ai,0),每個盒子到匯點建邊(i,t,1,0),相鄰盒子建邊(i,j,∞,1)。
//#pragma comment(linker, "/stack:102400000,102400000")
#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
#define mp(x,y) make_pair((x),(y))
#define pb(x) push_back(x)
//typedef __int64 ll;
//typedef unsigned __int64 ull;
/* ****************** */
const int inf=100011122;
const double inff=1e100;
const double eps=1e-8;
const int mod=9999991;
const int nn=1005;
const int mm=2000010;
/* ****************** */
struct g
e[nn*4*2];
int p[nn],t;
int dd[nn],qw[nn],ff[nn],pre[nn];
bool inq[nn];
void add(int u,int v,int cap,int cost)
bool find_path(int st,int en,int n,int &flow,int &cost)
head=tail=0;
qw[tail++]=st;
inq[st]=true;
dd[st]=0;
ff[st]=inf;
while(head!=tail)}}
}}
if(dd[en]==inf)return false;
flow+=ff[en];
cost+=ff[en]*dd[en];
u=en;
while(u!=st)
return true;
}int mincost(int st,int en,int n)
int main()
add(i,i==1?n:i-1,inf,1);
add(i,i==n?1:i+1,inf,1);
}ans=mincost(0,n+1,n+1);
printf("%d\n",ans);
}return 0;
}
最小費用流
include include define maxn 61 define maxv maxn maxn 2 1 define maxe maxv 5 define oo 2147483647 define min a,b a b b a define maxq maxe using namespa...
最小費用流
int v 頂點數 vector g max v int dist max v 最短距離 int prev max v 最短路中前驅結點對應的點 int pree max v 最短路中前驅結點對應的邊 void addedge int from,int to,int cap,int cost 求從s...
最小費用流
acm模版 最小費用流 o v e f init network g g.build v,e call g.mincost s,t flow g.flow cost g.cost 注意 spfa增廣,實際複雜度遠遠小於o v e define typef int type of flow defin...