BZOJ4819 新生舞會(分數規劃,網路流)

2022-03-20 05:54:10 字數 1535 閱讀 2954

bzoj

學校組織了一次新生舞會,cathy作為經驗豐富的老學姐,負責為同學們安排舞伴。有n個男生和n個女生參加舞會

買乙個男生和乙個女生一起跳舞,互為舞伴。cathy收集了這些同學之間的關係,比如兩個人之前認識沒計算得出

a[i][j] ,表示第i個男生和第j個女生一起跳舞時他們的喜悅程度。cathy還需要考慮兩個人一起跳舞是否方便,

比如身高體重差別會不會太大,計算得出 b[i][j],表示第i個男生和第j個女生一起跳舞時的不協調程度。當然,

還需要考慮很多其他問題。cathy想先用乙個程式通過a[i][j]和b[i][j]求出一種方案,再手動對方案進行微調。c

athy找到你,希望你幫她寫那個程式。乙個方案中有n對舞伴,假設沒對舞伴的喜悅程度分別是a'1,a'2,...,a'n,

假設每對舞伴的不協調程度分別是b'1,b'2,...,b'n。令

c=(a'1+a'2+...+a'n)/(b'1+b'2+...+b'n),cathy希望c值最大。

第一行乙個整數n。

接下來n行,每行n個整數,第i行第j個數表示a[i][j]。

接下來n行,每行n個整數,第i行第j個數表示b[i][j]。

1<=n<=100,1<=a[i][j],b[i][j]<=10^4

一行乙個數,表示c的最大值。四捨五入保留6位小數,選手輸出的小數需要與標準輸出相等

19 17 16

25 24 23

35 36 31

9 5 6

3 4 2

7 8 9

5.357143

很明顯的分數規劃了

二分乙個答案

現在要讓\(\sum a-mid·\sum b\geq 0\)

顯然是要求二分圖的最大帶權匹配

\(km\)演算法早就不會了

直接上費用流就行了

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

#define ll long long

#define rg register

#define max 111

inline int read()

struct linee[max*max*2];

int h[max<<1],cnt;

inline void add(int u,int v,int w,double fy)

;h[u]=cnt++;

e[cnt]=(line);h[v]=cnt++;

}double dis[max<<1],cost;

bool vis[max<<1];

int n,s,t,pe[max<<1],pv[max<<1];

int a[max][max],b[max][max];

bool spfa()

int main()

printf("%.6lf\n",l);

return 0;

}

bzoj4819 Sdoi2017 新生舞會

description 學校組織了一次新生舞會,cathy作為經驗豐富的老學姐,負責為同學們安排舞伴。有n個男生和n個女生參加舞會 買乙個男生和乙個女生一起跳舞,互為舞伴。cathy收集了這些同學之間的關係,比如兩個人之前認識沒計算得出 a i j 表示第i個男生和第j個女生一起跳舞時他們的喜悅程度...

BZOJ4819 SDOI2017 新生舞會

bzoj luogu 有 n 個男孩子和 n 個女孩子。他們之間要兩兩結伴跳舞。已知第 i 個男孩子和第 j 個女孩子結伴跳舞會有兩個引數 a 和 b 現在要求乙個安排方案使得 a 的總和除以 b 的總和的商盡量大。形式化地,就是求乙個長度為 n 的排列 最大化 l frac a b 分數規劃。二分...

BZOJ 4819 Sdoi2017 新生舞會

bzoj 4819 sdoi2017 新生舞會 01分數規劃 費用流 學校組織了一次新生舞會,cathy作為經驗豐富的老學姐,負責為同學們安排舞伴。有n個男生和n個女生參加舞會 買乙個男生和乙個女生一起跳舞,互為舞伴。cathy收集了這些同學之間的關係,比如兩個人之前認識沒計算得出 a i j 表示...