bzoj3894 文理分科

2022-08-05 01:42:16 字數 2351 閱讀 7612

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

小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];

接下來n行m個整數,表示same_science[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

最小割我們設把乙個點割到s表示這個人選文,割到t表示選理

把s向每個點連一條art的邊,表示如果割斷這條邊,這個人選理,損失選文的收益

把每個點向t連一條science的邊,表示如果割斷這條邊,這個人選文,損失選理的收益

那麼對於2,3兩個條件該如何處理呢

首先,我們對於每5個相鄰的節點,新建乙個點。從s向這個點連一條same_art的邊,割斷這條邊,表示他們五個人不都選文,損失這個收益,不割斷表示都選文

對於選理,也是新建乙個點。從這個點向t連一條same_science的邊,割斷這條邊,表示他們五個人不都選理,損失這個收益,不割斷表示都選理

為了防止不割斷這條邊而不選相同的事情發生,我們把新建節點向5個相鄰的節點連inf的邊(或把5個相鄰的節點連邊向新建節點連邊),表示該邊無法被割斷,即不能出現非法的情況

跑最大流

#include#include

#include

using

namespace

std;

int iter[500001],que[500001],hh,tt,cap[500001],nxt[500001],to[500001],g[1000001],level[500001],h[500001],k=1

;const

int inf=999999999

;void ins(int u,int v,int

c)inline

intread()

bool bfs(int s,int

t) }

}if(!level[t])return0;

return1;

}int dfs(int u,int f,int

t) }

}return

used;

}int dinic(int s,int t,int

y)

return

flow;

}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 j=1;j<=m;j++)

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

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

printf("%d

",tot-dinic(s,t,kk));

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