bzoj3894 文理分科

2021-08-14 11:07:17 字數 2368 閱讀 2343

description

文理分科是一件很糾結的事情!(雖然看到這個題目的人肯定都沒有糾

結過)

小p所在的班級要進行文理分科。他的班級可以用乙個n*m的矩陣進行

描述,每個格仔代表乙個同學的座位。每位同學必須從文科和理科中選擇

一科。同學們在選擇科目的時候會獲得乙個滿意值。滿意值按如下的方式

得到:

1.如果第i行第秒j的同學選擇了文科,則他將獲得art[i][j]的滿意值,如

果選擇理科,將得到science[i][j]的滿意值。

2.如果第i行第j列的同學選擇了文科,並且他相鄰(兩個格仔相鄰當且

僅當它們擁有一條相同的邊)的同學全部選擇了文科,則他會更開

心,所以會增加same_art[i][j]的滿意值。

3.如果第i行第j列的同學選擇了理科,並且他相鄰的同學全部選擇了理

科,則增加same_science[i]j的滿意值。

小p想知道,大家應該如何選擇,才能使所有人的滿意值之和最大。請

告訴他這個最大值。

input

第一行為兩個正整數:n,m

接下來n術m個整數,表示art[i][j];

接下來n術m個整數.表示science[i][j];

接下來n術m個整數,表示same_art[i][j];

output

輸出為乙個整數,表示最大的滿意值之和

sample input

3 4

13 2 4 13

7 13 8 12

18 17 0 5

8 13 15 4

11 3 8 11

11 18 6 5

1 2 3 4

4 2 3 2

3 1 0 4

3 2 3 2

0 2 2 1

0 2 4 4

sample output

152

hint

樣例說明

1表示選擇文科,0表示選擇理科,方案如下:

1 0 0 1

0 1 0 0

1 0 0 0

n,m<=100,讀入資料均<=500

這題的建圖非常有意思 以我的個人能力只能想到一半吧 我多菜啊 大概就是有點像bzoj3132 然後再給他拆個點就好 首先呢 我先把每個人拆成三個點 乙個代表本身的點 乙個代表文理分科的點 首先呢就是每個點從源連向這個點連文科的值 這個點向匯連理科的值 那麼我割去哪個代表我就沒選哪個唄 然後 假設我文科都選的那個點叫p1吧 理科都選的那個點叫p2 那麼有如下的性質 我從源向p1連 如果他附近都選文的代價 然後他向自己 還有周邊的點都連inf的邊 這樣的話 為了保證這條邊的存在我不得不把和我有關的理科的邊都割去 從我p2向匯連容量為都選理科的代價 然後從我自己向p2連inf 的邊 從 任意有關聯的點向p2連inf的邊 那麼同理 如果想保留這個點的話 必須把有關的還有自己的文科邊都割去才行 那麼求一下原圖的最小割用總和減一減即可了呢

#include

#include

#include

#include

#define n 33000

#define inf 0x3f3f3f3f

using

namespace

std;

inline

char gc()

return *s++;

}inline

int read()

while(ch<='9'&&ch>='0')

return x*f;

}int dx=,dy=,id[110][110],id1[110][110],id2[110][110];

int h[n],level[n],num=1,t,cur[n],n,m;

struct nodedata[n*10];

inline

void insert1(int x,int y,int z)

inline

bool bfs()

}return0;}

inline

int dfs(int x,int s)

}return ss-s;

}int main()

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

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

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

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

}}int ans=0;while(bfs()) memcpy(cur,h,sizeof(h)),ans+=dfs(0,inf); printf("%d",sum-ans);

return

0;}

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,這個人以...