2127: happiness

题目:传送门

题解:

   双倍经验美滋滋~

   请看蒟蒻以前写的渣题解...bzoj3894

   表示做完自己就最小割了...

代码(直接改的...菜啊):

 

 #include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define inf 999999999
#define qread(x)x=read();
using namespace std;
inline int read()
{
int f=,x=;char ch;
while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
return f*x;
}
const int dx[]={,-,,,};
const int dy[]={,,,-,};
struct node
{
int x,y,c,next,other;
}a[];int len,last[];
int n,m,st,ed,head,tail;
void ins(int x,int y,int c)
{
int k1,k2;
k1=++len;
a[len].x=x;a[len].y=y;a[len].c=c;
a[len].next=last[x];last[x]=len; k2=++len;
a[len].x=y;a[len].y=x;a[len].c=;
a[len].next=last[y];last[y]=len; a[k1].other=k2;
a[k2].other=k1;
}
int list[],h[];
bool bt_h()
{
memset(h,,sizeof(h));h[st]=;
list[]=st;head=;tail=;
while(head!=tail)
{
int x=list[head];
for(int k=last[x];k;k=a[k].next)
{
int y=a[k].y;
if(h[y]== && a[k].c>)
{
h[y]=h[x]+;
list[tail++]=y;
}
}
head++;
}
if(h[ed]>)return true;
return false;
}
int find_flow(int x,int flow)
{
if(x==ed)return flow;
int s=,t;
for(int k=last[x];k;k=a[k].next)
{
int y=a[k].y;
if(h[y]==h[x]+ && a[k].c> && s<flow)
{
s+=t=find_flow(y,min(a[k].c,flow-s));
a[k].c-=t;a[a[k].other].c+=t;
}
}
if(s==)h[x]=;
return s;
}
int w[][],l[][],sw1[][],sl1[][],sw2[][],sl2[][];
int d[][];
int main()
{
qread(n);qread(m);
st=n*m*+;ed=st+;
len=;memset(last,,sizeof(last));
int ss=;
for(int i=;i<=n;i++)for(int j=;j<=m;j++)d[i][j]=ss++;
int sum=;
for(int i=;i<=n;i++)for(int j=;j<=m;j++){qread(w[i][j]);ins(st,d[i][j],w[i][j]);sum+=w[i][j];}
for(int i=;i<=n;i++)for(int j=;j<=m;j++){qread(l[i][j]);ins(d[i][j],ed,l[i][j]);sum+=l[i][j];}
for(int i=;i<n;i++)
for(int j=;j<=m;j++)
{
qread(sw1[i][j]);
if(d[i][j]>)
ins(d[i][j]+n*m,d[i][j],inf);
if(d[i+][j]>)
ins(d[i][j]+n*m,d[i+][j],inf);
ins(st,d[i][j]+n*m,sw1[i][j]);
sum+=sw1[i][j];
}
for(int i=;i<n;i++)
for(int j=;j<=m;j++)
{
qread(sl1[i][j]);
if(d[i][j]>)
ins(d[i][j],d[i][j]+n*m*,inf);
if(d[i+][j]>)
ins(d[i+][j],d[i][j]+n*m*,inf);
ins(d[i][j]+n*m*,ed,sl1[i][j]);
sum+=sl1[i][j];
}
for(int i=;i<=n;i++)
for(int j=;j<m;j++)
{
qread(sw2[i][j]);
if(d[i][j]>)
ins(d[i][j]+n*m*,d[i][j],inf);
if(d[i][j+]>)
ins(d[i][j]+n*m*,d[i][j+],inf);
ins(st,d[i][j]+n*m*,sw2[i][j]);
sum+=sw2[i][j];
}
for(int i=;i<=n;i++)
for(int j=;j<m;j++)
{
qread(sl2[i][j]);
if(d[i][j]>)
ins(d[i][j],d[i][j]+n*m*,inf);
if(d[i][j+]>)
ins(d[i][j+],d[i][j]+n*m*,inf);
ins(d[i][j]+n*m*,ed,sl2[i][j]);
sum+=sl2[i][j];
}
int ans=;
while(bt_h())ans+=find_flow(st,inf);
printf("%d\n",sum-ans);
return ;
}

bzoj2127: happiness(双倍经验最小割)的更多相关文章

  1. 【BZOJ2127】happiness(最小割)

    [BZOJ2127]happiness(最小割) 题面 Description 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了, ...

  2. 【bzoj2127】happiness 网络流最小割

    题目描述 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文 ...

  3. 「BZOJ2127」happiness(最小割)

    题目描述 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文 ...

  4. [BZOJ 2127] happiness 【最小割】

    题目链接:BZOJ - 2127 题目分析 首先,每个人要么学文科,要么学理科,所以可以想到是一个最小割模型. 我们就确定一个人如果和 S 相连就是学文,如果和 T 相连就是学理. 那么我们再来确定建 ...

  5. bzoj 2127 happiness【最小割+dinic】

    参考:https://www.cnblogs.com/chenyushuo/p/5144957.html 不得不说这个建图方法真是非常妙啊 假设S点选理,T点选文,a[i][j]为(i,j)选文收益, ...

  6. bzoj2768: [JLOI2010]冠军调查(双倍经验最小割)

    2768: [JLOI2010]冠军调查 题目:传送门 题解: 双倍经验(1934) 代码: #include<cstdio> #include<cstring> #inclu ...

  7. BZOJ2127/LG1646 happiness 新建点最小割

    问题描述 BZOJ2127 LG1646 题解 和文理分科差不多 收益最大 -> 损失最小 -> 最小割 分别新建点表示互相关系就行了 \(\mathrm{Code}\) #include ...

  8. 【BZOJ2127】happiness 最小割

    题目大意:有一个$n\times m$的矩阵,矩阵的每个位置上有一个同学,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦 ...

  9. [bzoj2127]happiness——最小割

    这个题太恶心了...并不想继续做了... 本代码在bzoj上TLE! 大致说一下思路: 建立ST,首先由S连边(S,u,a)a代表学文的分数,连向T(u,T,b)b表示学理的分数,这样构造出了两个人独 ...

随机推荐

  1. 五大最佳开源java性能监控工具

    如果你正在寻找性能监控工具,不妨看看以下推荐的这五款开源工具,这些工具目前已经可以替代付费工具了,你可以看看是否是你的最佳选择.本文推荐的五款开源工具目前是开源社区中最受欢迎的. 1. Stagemo ...

  2. Servlet里面一调用Dao里的某个方法

    背景: 这几天,由于项目集成的需要,我要在doFilter里调用dao层里的某些方法,可是总之报空指针,只要调用那个dao方法,就报错误.很是纳闷,网上查找了各种原因,终于让我给突破了,看来还是Jav ...

  3. UltraEdit正則表達式介绍及实例

    前几天,有个将Excel中的数据导入到数据库中的需求.原本想到用程序读取Excel中的数据并存储到数据库中,但经一哥们的提醒,说用 EditPlus或UltraEdit这种工具直接将数据拼凑成SQL插 ...

  4. [CSS3] CSS Background Images

    Body with background image and gradient html { background: linear-gradient(#000, white) no-repeat; h ...

  5. Mysql 数据迁移后 启动出错

    今天上班后不知道为什么,mysql一直无法启动,折腾了半天于是决定重装 我本地的server用的是wamp , 重装的时候, 要进行数据备份 , 我使用的最简单粗暴的备份方式, 就是直接进入到mysq ...

  6. Java虚拟机的类载入机制

    Java虚拟机类载入过程是把Class类文件载入到内存.并对Class文件里的数据进行校验.转换解析和初始化,终于形成能够被虚拟机直接使用的java类型的过程. 在载入阶段,java虚拟机须要完毕下面 ...

  7. 阿里云部署Docker(8)----安装和使用redmine

    安装redmine对过程进行管理. 须要说明的是:当你在docker images的时候,会说没连接到xxxx的时候,并且会提示用"docker -d".事实上这仅仅是把docke ...

  8. 箭头函数普通函数this

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. python 提取主域名和子域名代码——先根据规则提取,如果有问题,则使用tldextract

    import tldextract def extract_domain(domain): suffix = {'.com','.la','.io', '.co', '.cn','.info', '. ...

  10. Linux Yum 命令使用举例

    转自:https://blog.csdn.net/u012359618/article/details/51199309/ 本文给大家讲解Yum的使用15个范例: Yum软件包管理方式,在Red Ha ...