BZOJ 1834 網路擴容 最大流 費用流

2022-05-26 23:51:08 字數 2389 閱讀 5616

對於第一問,直接求最大流。

對於第二問,建源點s和匯點t,s連1容量為inf,費用為0的邊,n連t容量為最大流+k,費用為0的邊。這樣就把最大流限制為最多增加k了。

限制需要求擴充的最小費用,原圖的邊多連一條容量為inf,費用為增容費用k的邊。跑一遍費用流即是答案。

# include # include 

# include

# include

# include

# include

# include

# include

# include

# include

# include

using

namespace

std;

# define lowbit(x) ((x)&(-x))

# define pi

3.1415926535

# define eps 1e-9

# define mod

1000000009

# define inf

1000000000

# define mem(a,b) memset(a,b,

sizeof

(a))

# define for(i,a,n)

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

# define fo(i,a,n)

for(int i=a; ii)

# define bug puts("h

");# define lch p

<<1

,l,mid

# define rch p

<<1|1,mid+1

,r# define mp make_pair

# define pb push_back

typedef pair

pii;

typedef vector

vi;# pragma comment(linker,

"/stack:1024000000,1024000000")

typedef

long

long

ll;int

scan()

void out(int

a)

if(a>=10) out(a/10

); putchar(a%10+'0'

);}const

int n=1005;//

code begin...

struct edgeedge[n*10

];struct edge1edge1[n*20

];struct nodenode[5005

];int head[n], cnt=2

, s, t;

intvis[n], head1[n], tol, pre[n], dis[n];

bool

mark[n];

queue

q;void add_edge(int u, int v, int

w)void addedge(int u, int v, int cap, int

cost)

bool spfa(int s, int

t) }

}if (pre[t]==-1) return

false

;

else

return

true;}

int mincostmaxflow(int s, int t, int &cost)

for (int i=pre[t]; i!=-1; i=pre[edge1[i^1

].to])

flow+=min;

}return

flow;

}int

bfs()}}

return vis[t]!=-1;}

int dfs(int x, int

low)

}if (temp==low) vis[x]=-1

;

return low-temp;

}int

main ()

int tmp, sum=0

;

while (bfs()) while (tmp=dfs(s,inf)) sum+=tmp;

addedge(s,

1,inf,0); addedge(n,t,sum+k,0

); for(i,

1,m)

mincostmaxflow(s,t,ans);

printf(

"%d %d\n

",sum,ans);

return0;

}

view code

bzoj1834 網路擴容

給定一張有向圖,每條邊都有乙個容量c和乙個擴容費用w。這裡擴容費用是指將容量擴大1所需的費用。求 1 在不擴容的情況下,1到n的最大流 2 將1到n的最大流增加k所需的最小擴容費用。輸入檔案的第一行包含三個整數n,m,k,表示有向圖的點數 邊數以及所需要增加的流量。接下來的m行每行包含四個整數u,v...

bzoj1834 網路擴容 網路流

好久沒寫題解了啊 給你一幅n個點的網路,先求出其1到n的最大流,每條弧還會有個屬性co sti cos ti 表示沒擴容乙個單位的費用,現在我們要求的就是擴容k個單位的最小費用 這是一道比較裸的網路流,第一問直接dinic就是了,重點就在於第二問。我們把第一問的殘量網路繼續利用,其中的每條弧的費用都...

BZOJ 1834 網路擴容 最大流 最小費用流

題目大意 給定一張有向圖,每條邊都有乙個容量c和乙個擴容費用w。這裡擴容費用是指將容量擴大1所需的費用。求 1 在不擴容的情況下,1到n的最大流 2 將1到n的最大流增加k所需的最小擴容費用。思路 第一問直接求費用流,第二問,在第一問的殘餘網路上,對於每條邊額外加上inf容量費用為w的邊,限制最大流...