題意:有 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一直往後延伸,然後從源點到匯點計算每條路,但是這樣只是單條路的最值,有時可能因為走一條路而間接的認定了除這條路以外的某個路通...