網路流習題

2021-10-05 08:44:42 字數 3325 閱讀 1003

題意:有 n

nn 個事件,每個事件需要完成 c

ic_i

ci​ 次。每個事件只能在一周中的特定日期完成,可以完成無限次。每天所有完成事件的總次數不能超過 e

ee 次。問最少幾天可以完成所有事件

思路:網路流 + 二分

#include .h>

#define ll long

long

#define int ll

using namespace std;

const

int maxn=

2000

,maxm=

8000

;int n,e;

vector<

int>

vec[maxn]

;int c[maxn]

;namespace dinic

edges[maxm<<1]

;void

init

(int n)

void

add(

int u,

int v,

int flow)

; head[u]

=cnt;

edges[

++cnt]=;

head[v]

=cnt;

} bool bfs

(int s,

int t)}}

return depth[t]

}int

dfs(

int u,

int t,

int curflow)

//當前邊的流

}return flow;

} ll maxflow

(int s,

int t)};

intcheck

(int mid)

for(

int i=

1;i<=n;

++i)

return dinic:

:maxflow

(s,t);}

main()

int l=

0,r=

1e9;

while

(lprintf

("%lld\n"

,l);

}

題意:給定乙個 n×n

n\times n

n×n 的網格圖,給出 m 個矩陣將格仔染成黑色。你可以選擇任意大小的矩陣 h×w

h\times w

h×w,並花費 min

(h,w

)min(h,w)

min(h,

w)將選擇的矩陣染回白色。你可以操作任意多次,問將網格圖全部染回白色的最小代價

思路

#include .h>

#define ll long

long

using namespace std;

const

int maxn=

1e5+10;

namespace dinic

edges[maxm<<1]

;void

init

(int n)

void

add(

int u,

int v,

int flow)

; head[u]

=cnt;

edges[

++cnt]=;

head[v]

=cnt;

} bool bfs

(int s,

int t)}}

return depth[t]

}int

dfs(

int u,

int t,

int curflow)

//當前邊的流

}return flow;

}int

maxflow

(int s,

int t)};

int n,m;

vector<

int>

allx,ally;

struct opt

opt[60]

;int

main()

; allx.

push_back

(x1)

,allx.

push_back

(x2)

; ally.

push_back

(y1)

,ally.

push_back

(y2);}

sort

(allx.

begin()

,allx.

end())

;sort

(ally.

begin()

,ally.

end())

; allx.

resize

(unique

(allx.

begin()

,allx.

end())

-allx.

begin()

);ally.

resize

(unique

(ally.

begin()

,ally.

end())

-ally.

begin()

);dinic:

:init

(300);

int s=

200,t=

201;

for(

int i=

1; isize()

;++i)

dinic:

:add

(s,i,allx[i]

-allx[i-1]

);for(

int i=

1; isize()

;++i)

dinic:

:add

(i+100

,t,ally[i]

-ally[i-1]

);for(

int i=

1; i<=m;

++i)

int ans=dinic:

:maxflow

(s,t)

;printf

("%d\n"

,ans)

;return0;

}

網路流習題

1.飛行員配對問題 每架飛機需要2個飛行員,乙個英國,乙個外籍,現在告訴你每個外籍飛行員可以和哪些英國飛行員配合,求最多能配對多少對 二分圖最大匹配 1匈牙利 2最大流 對於每個外籍i,向他可以配合j的英籍 build i,j,1 對於每個外籍i build s,i,1 對於每個英籍j build ...

網路流 費用流

這個好像不考 沒事可以騙分 費用流,顧名思義,就是有費用的流,也就是說,給乙個網路流圖中的每條弧增加乙個單位流量費用。一般來說求解的費用流都是最大流最小費用。好像沒什麼好bb的 這裡推薦使用zkw演算法求解最小費用流,看著 理解就行,應該還是很好理解的。zkw演算法在稠密圖上跑得飛快,在稀疏圖上還不...

網路流 費用流

網路流有很多種類 其中最大流 有增廣路演算法和預流推進演算法。增廣路演算法就是不斷的新增增廣路。其中的dinic演算法。會稍微提到isap演算法 poj1273 首先想到dfs一直往後延伸,然後從源點到匯點計算每條路,但是這樣只是單條路的最值,有時可能因為走一條路而間接的認定了除這條路以外的某個路通...