BZOJ:3894: 文理分科(网络流)

题目

每个同学都只能选择文科或者理科一种,选择文科会获得一个权值,理科也有,如果一个人以及周围四个人都选择了一个学科,那么又会获得一个权值。
将权值最大化。

分析

很经典的网络流题目,用最小割。
首先我们的模型想法是把最终和S集联通的弄成文集,T集联通的弄成理集,然后用最小割割掉,为了使用最小割,我们采取首先加入所有权值,然后看根据选择减少了哪些权值。

连边的方式就是:
对于一个结点,s->i连文科,i->t连理科。
然后弄一个全部文科的结点i’,s->i’流量是权值,i’->对应的五个点,流量inf。
理科的话自己推一下就出来了。

这样做的结果就是,一旦一个结点选择理科,那么文科边,以及它所有对应的全部选择文科的那种结点,全部会被割掉,使得获取正确答案。

代码

#include<cmath>
#include<queue>
#include<cctype>
#include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=10000*3+105,maxm=maxn*5,inf=1e9;
int np,first[maxn];
struct edge{
    int from,to,next,cap,flow;
}E[maxm<<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值