bzoj3894 文理分科

2022-06-07 22:27:07 字數 1136 閱讀 2842

假設沒有同時選文理科的收益,可以先將所有點的文理科收益都加起來,考慮最少要刪掉多少收益,源點連向每乙個點文科的收益,每乙個點向匯點流理科的收益,然後每一條路徑都最小割,即去掉了較小的收益。

但還有同時選同一種科目的收益,同樣先加上所有選同種科目的收益,然後對於點(i,j),新增k1和

k2兩個點,源點向

k1流都選文科的邊,

k1向五個點、五個點向

k2都連

inf的邊,

k2向匯點流都選理科的邊。同樣跑最小割,考慮當這五個點全部都刪去文理科,那麼只需要再刪掉這個點的都選文理科即可,當這個五個點選擇刪去的不同時,一定要兩個都刪掉才能滿足,因此就是最小割。

1 #include2

using

namespace

std;

3#define n 30005

4#define id (i-1)*m+j

5#define inf 0x3f3f3f3f

6struct

jiedge[n*10

];9 queueq;

10int

e,n,m,k,ans,d[n],head[n],work[n];

11void add(int x,int y,int

z)18

bool

bfs()30}

31return d[n]>=0;32

}33int dfs(int k,int

s)44}45

return0;

46}47int

dinic()

53return

ans;54}

55int

main()

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

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

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

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

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

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

92 n=3*n*m+1

;93 printf("

%d",ans-dinic());

94 }

view code

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