FZOJ 4112 脫單計畫

2022-05-04 14:00:13 字數 1457 閱讀 4306

這是一道費用流的好題。

首先題目給你的男士女士以及之間的關係可以看做乙個二分圖。考慮暴力連邊(用\([x,y]\)表示流量為\(x\),費用為\(y\)的邊):

然後時間複雜度是\(o(nmf)\),不能通過此題。

考慮暴力連邊邊的數量是\(o(n^2)\)級別的,是否能減少連邊的數量。

現在假設每個男士小區和女士小區的距離為\(x1+y1-x2-y2\)(也就是去掉了絕對值的曼哈頓距離,其中\(x1,y1\)分別表示男士小區的橫、縱座標,\(x2,y2\)分別表示女士小區的橫、縱座標),那麼我們可以建乙個輔助點\(p\),男士小區向\(p\)連費用為\(x1+y1\)的邊,\(p\)向女士小區連費用為\(-x1-y1\)的邊,由於費用會累加的緣故,我們發現這樣連邊的效果和暴力是相同的,而邊的數量卻是\(o(n)\)級別的。

那麼加上絕對值該怎麼做呢?我們可以分類討論\(|x1-x2|+|y1-y2|\)的四種情況,建四個輔助點每個都向類似上文連邊,發現如果某種連邊方式如果與\(|x1-x2|+|y1-y2|\)的值並不相等也只能小於它,而我們求的是最大費用流,所以這些「錯誤」的邊一定會被「正確」的邊取代,從而保證答案的正確。

注:由於最後要求最大費用流,所以實際連邊的時候費用應全部取相反數。

**:

#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int n=5000;

const ll inf=1ll<<60;

deque q;

int n,male[n],female[n],xm[n],ym[n],xf[n],yf[n],km[n],kf[n],s,t;

int tot,head[n*10],cnt=1,inq[n],vis[n],cur[n],p[10];

ll dis[n],mincost;

struct edge

g[n*10];

void add(int from,int to,ll w,ll c)

void add(int from,int to,ll w,ll c)

void init()

int dis1(int i,int type)

int dis2(int i,int type)

int dis3(int i,int type)

int dis4(int i,int type)

void clear()

int spfa()

} }return dis[t]!=inf;

}ll dfs(int x,ll min)

return flow;

}int dinic()

void work()

dinic();

printf("%lld\n",-mincost);

}int main()

FZOJ 2210 攻占計畫

time limit 1000 msec memory limit 131072 kb problem description a國和b國正在進行一場戰爭,a國有n座城市,這些城市被m條有向道路相連,這些道路不會形成環路。其中有一部分城市比較特殊,其擁有糧倉,擁有糧倉的城市不能被其他城市到達,糧食可...

fzoj 2119 祖先問題

problem 2119 祖先問題 有n個結點構成了多棵樹,給出每個結點的父節點,若為 1則表示該結點無父節點。每個結點的父節點編號必須比該結點的編號小。給m個操作,有兩種操作 1.重新設定某結點的父節點 2.求某結點的祖先個數。乙個結點的祖先為其父節點及其父節點的祖先。有多組資料輸入。每組資料的第...

日常整理4 11

1 python中is和 的區別是什麼?is比較的是兩個物件的id值是否相等,也就是比較倆物件是否為同乙個例項物件,是否指向同乙個記憶體位址。比較的是兩個物件的內容是否相等 2 http協議與https協議有什麼區別?1 https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。2 ht...