BZOJ3894 文理分科

2022-05-19 21:02:55 字數 1428 閱讀 3553

給出六個矩陣描述n*m個人選擇文科理科的情況

第乙個矩陣(n*m):a[i][j]表示第i行第j列的人選擇文科的喜悅值

第二個矩陣(n*m):b[i][j]表示第i行第j列的人選擇理科的喜悅值

第三個矩陣(n*m):c[i][j]表示第i行第j列的人選擇文科並且上下左右的人都選擇文科的喜悅值

第三個矩陣(n*m):d[i][j]表示第i行第j列的人選擇理科並且上下左右的人都選擇理科的喜悅值

求出最大喜悅值

和bzoj2127的題意相似

也是最小割

對於i和i相鄰的人,新開乙個點

將st連向這些人和新開的點,流量為選文科的喜悅值

將i和i相鄰的人連向乙個新開的點,流量為無窮大

將這個新開的點連向ed,流量為c[i][j]

這樣子,就表示集合內任意乙個人學理都要把這個點與t的邊割掉

對於理科的連邊同理,但理科要反向連邊

#include#include

#include

#include

#include

using

namespace

std;

int a[110][110],b[110][110],c[110][110],d[110][110

];struct

node

a[2100000];int len,last[31000

];void ins(int x,int y,int

c)int h[31000],list[31000

];int

st,ed;

bool

bt_h()

}head++;

}if(h[ed]==0) return

false

;

else

return

true;}

int findflow(int x,int

f) }

if(s==0) h[x]=0

;

returns;}

int d[110][110

];int dx[5]=;

int dy[5]=;

intmain()

for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)

for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)

for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)

for(int i=1;i<=n;i++)}}

int ans=0

;

while

(bt_h())

printf(

"%d\n

",s-ans);

return0;

}

BZOJ 3894 文理分科

time limit 10 sec memory limit 512 mb submit 194 solved 122 submit status discuss description 文理分科是一件很糾結的事情!雖然看到這個題目的人肯定都沒有糾 結過 小p所在的班級要進行文理分科。他的班級可以用...

BZOJ 3894 文理分科

解四個方程。為了簡潔我們畫出來兩個來解方程推理一下。s a aa s b ab a t ba b t bb s x a和其他相關格仔收益 x t 同上 include include include include include define maxn 1000010 using namespac...

bzoj3894 文理分科

s向每個人連邊,容量是選文科的滿意值 每個點向t連邊,容量是選理科的滿意值。再新建2 n m個點,表示每個人和相鄰的人都選文 p1 或都選理 p2 s向p1連邊,容量為這個人的same art,p1再向這個人和相鄰的四個人都連inf的邊 p2向t連邊,容量為這個人的same science,這個人以...