BZOJ 2502 清理雪道(有源匯上下界最小流)

2021-10-01 06:14:22 字數 1527 閱讀 9583

滑雪場坐落在fj省西北部的若干座山上。

從空中鳥瞰,滑雪場可以看作乙個有向無環圖,每條弧代表乙個斜坡(即雪道),弧的方向代表斜坡下降的方向。

你的團隊負責每週定時清理雪道。你們擁有一架直公升飛機,每次飛行可以從總部帶乙個人降落到滑雪場的某個地點,然後再飛回總部。從降落的地點出發,這個人可以順著斜坡向下滑行,並清理他所經過的雪道。

由於每次飛行的耗費是固定的,為了最小化耗費,你想知道如何用最少的飛行次數才能完成清理雪道的任務。

新建乙個源點表示***(…),那麼從***流出的流量必須覆蓋所有的邊。那麼邊的下界是1,上界inf,然後套用有源匯上下界最小流就行了。這裡我沒有建匯點,所以最後需要每個點都向s連邊。

#include

using

namespace std;

template

<

class

t>

inline

void

read

(t &x)

const

int maxn =

105;

const

int maxm =

10005

+205

;const

int inf =

0x3f3f3f3f

;int n, m, out[maxn]

, in[maxn]

;int info[maxn]

, fir[maxn]

, to[maxm<<1]

, nxt[maxm<<1]

, c[maxm<<1]

, cnt =1;

inline

void

link

(int u,

int v,

int cc)

int s, t, dis[maxn]

, ans;

queue<

int>q;

bool vis[maxn]

, inq[maxn]

;bool

bfs(

)return

~dis[t];}

intaug

(int u,

int max)

vis[u]=0

;return flow;

}int

maxflow

(int s,

int t)

int main ()}

int ss = n+

2, tt = n+3;

for(

int i =

1; i <= s;

++i)

maxflow

(ss, tt)

;for

(int i =

1; i <= n;

++i)

link

(i, s, inf)

;printf

("%d\n"

,maxflow

(ss, tt));

}

bzoj 2502 清理雪道

time limit 10 sec memory limit 128 mb submit 510 solved 276 submit status discuss 滑雪場坐落在 fj省西北部的若干座山上。從空中鳥瞰,滑雪場可以看作乙個有向無環圖,每條弧代表乙個斜坡 即雪道 弧的方向代表斜坡下降的方向...

有源匯上下界最小流 BZOJ 2502 清理雪道

time limit 10 sec memory limit 128 mb submit 1039 solved 561 submit status discuss 滑雪場坐落在 fj省西北部的若干座山上。從空中鳥瞰,滑雪場可以看作乙個有向無環圖,每條弧代表乙個斜坡 即雪道 弧的方向代表斜坡下降的方...

bzoj2502 清理雪道 最小流

time limit 10 sec memory limit 128 mb submit status discuss 滑雪場坐落在 fj省西北部的若干座山上。從空中鳥瞰,滑雪場可以看作乙個有向無環圖,每條弧代表乙個斜坡 即雪道 弧的方向代表斜坡下降的方向。你的團隊負責每週定時清理雪道。你們擁有一架...