題目大意:給定乙個m*n的矩陣,每個格仔的人可以學文或者學理,學文和學理各有乙個滿意度,如果以某人為中心的十字內所有人都學文或者學理還會得到乙個額外滿意度,求最大滿意度之和
令s集為學文,t集為學理
每個人學文或者學理的滿意度很好連邊
如果某個集合內的人都學理會獲得乙個滿意度,那麼就新加乙個點,將集合內的所有人向這個點連流量為正無窮的邊,再從這個點向t連一條流量為滿意度的邊,表示集合內任意乙個人學文都要把這個點與t的邊割掉
都學文同理
建完圖之後跑最小割即可
#include #include #include #include #define m 30300
#define s 0
#define t 30299
#define inf 0x3f3f3f3f
#define p(i,j) ((i)*n-n+(j))
using namespace std;
const int dx=;
const int dy=;
int m,n,ans;
namespace max_flowtable[1001001];
int head[m],tot=1;
int dpt[m];
void add(int x,int y,int z)
void link(int x,int y,int z)
bool bfs()
}return false;
} int dinic(int x,int flow)
if(left) dpt[x]=-1;
return flow-left; }}
int main()
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
}for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
}while( bfs() )
ans-=dinic(s,inf);
cout<
BZOJ 3894 文理分科 最小割
題目大意 給出乙個 每個人要選擇文科或者理科,每個人選擇文科有乙個滿意度,選擇理科有乙個滿意度,以乙個人為中心的五個人全選擇一科也有乙個滿意度。問最大的滿意度是多少。思路 以後看到文理分科之類的8成應該就是最小割了。先把答案全部累加起來,然後減去建圖之後的最大流就是答案。s 每個人 f 這個人選擇文...
bzoj 3894 文理分科 最小割
文理分科是一件很糾結的事情!雖然看到這個題目的人肯定都沒有糾 結過 小p所在的班級要進行文理分科。他的班級可以用乙個n m的矩陣進行 描述,每個格仔代表乙個同學的座位。每位同學必須從文科和理科中選擇 一科。同學們在選擇科目的時候會獲得乙個滿意值。滿意值按如下的方式 得到 1 如果第i行第秒j的同學選...
bzoj3894 文理分科 最小割
time limit 10 sec memory limit 512 mb submit 936 solved 553 submit status discuss 文理分科是一件很糾結的事情!雖然看到這個題目的人肯定都沒有糾 結過 小p所在的班級要進行文理分科。他的班級可以用乙個n m的矩陣進行 描...