来自FallDream的博客,未经允许,请勿转载,谢谢。


高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友。这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文科或者理科,那么他们又将收获一些喜悦值。作为计算机竞赛教练的scp大老板,想知道如何分配可以使得全班的喜悦值总和最大。  n,m<=100

文理分科的模型题....

对于每一个点,假如割到S表示选理科,割到T表示选文科,这两条边的边权显然,然后对于每一个特殊的条件,建立一个新点。如果表示都选文科获得的喜悦值,那么从S向他连边,边权是喜悦值,然后它向那两个点连边,边权设成INF。理科同理。

最后最小割。

然后去网上搜了搜发现了牛逼做法,对边权进行变换使得不用建出新点,效率变高。有兴趣可以自己看看。

#include<iostream>
#include<cstdio>
#include<cstring>
#define INF 2000000000
#define S 0
#define T 50000
#define num(x,y) ((x-1)*m+y)
using namespace std;
inline int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();}return x*f;
}int cnt=1,head[T+5],c[T+5],n,m,d[T+5],q[T+5],top=0,id;
unsigned int ans=0;
struct edge{int to,next,w;}e[T*10];inline void ins(int f,int t,int w)
{e[++cnt]=(edge){t,head[f],w};head[f]=cnt;e[++cnt]=(edge){f,head[t],0};head[t]=cnt;
}bool bfs()
{memset(d,0,sizeof(d));int i,j;for(d[q[top=i=1]=S]=1;i<=top;i++)for(int j=c[q[i]]=head[q[i]];j;j=e[j].next)if(e[j].w&&!d[e[j].to])d[q[++top]=e[j].to]=d[q[i]]+1;return d[T];
}int dfs(int x,int f)
{if(x==T)return f;int used=0;for(int&i=c[x];i;i=e[i].next)if(e[i].w&&d[e[i].to]==d[x]+1){int w=dfs(e[i].to,min(e[i].w,f-used));used+=w;e[i].w-=w;e[i^1].w+=w;if(used==f)return f;}return d[x]=-1,used;
}int main()
{n=read();m=read();id=num(n,m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){int x=read();ans+=x;ins(S,num(i,j),x);}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){int x=read();ans+=x;ins(num(i,j),T,x);}for(int i=1;i<n;i++)for(int j=1;j<=m;j++){int x=read();ans+=x;ins(S,++id,x);ins(id,num(i,j),INF);ins(id,num(i+1,j),INF);}for(int i=1;i<n;i++)for(int j=1;j<=m;j++){int x=read();ans+=x;ins(++id,T,x);ins(num(i,j),id,INF);ins(num(i+1,j),id,INF);}for(int i=1;i<=n;i++)for(int j=1;j<m;j++){int x=read();ans+=x;ins(S,++id,x);ins(id,num(i,j),INF);ins(id,num(i,j+1),INF);}for(int i=1;i<=n;i++)for(int j=1;j<m;j++){int x=read();ans+=x;ins(++id,T,x);ins(num(i,j),id,INF);ins(num(i,j+1),id,INF);}while(bfs()) ans-=dfs(S,INF);printf("%u\n",ans);return 0;
}

转载于:https://www.cnblogs.com/FallDream/p/bzoj2127.html

[bzoj2127]happiness相关推荐

  1. bzoj2127 happiness 最小割

    不要往费用流上想,要往最小割上想,舍弃的权值最小,然后就想一下放到哪边有哪些贡献,不同位置会割掉不同贡献的边, 然后枚举各种割的情况,赋边权就可以了 码: #include<iostream&g ...

  2. bzoj2127: happiness

    跟上题(文理分科)几乎一样啊. 结果findflow没有h[x]==0 T了N次... #include<cstdio> #include<iostream> #include ...

  3. 【BZOJ2127】happiness(网络流dinic)

    题目描述 传送门 题解 最小割,割掉的是舍弃的喜悦值. 从s向每一个人连边,容量为这个人学文的喜悦值:从每个人向t连边,容量为这个人学理的喜悦值. 处理两个人共同学文或学理的喜悦值的话,可以每两个人增 ...

  4. The greatest happiness 2019-11-13

    One of the greatest happiness of a person is to devote himself to a career that he is interested in. ...

  5. 基于bert模型的文本分类研究:“Predict the Happiness”挑战

    1. 前言 在2018年10月,Google发布了新的语言表示模型BERT-"Bidirectional Encoder Representations from Transformers& ...

  6. 1463. Happiness to People!

    http://acm.timus.ru/problem.aspx?space=1&num=1463 树形DP 此题有个陷阱   就是图的本身是一个森林 不是树 由于所有 happiness 的 ...

  7. BZOJ 2127: happiness

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MB Submit: 2084  Solved: 1028 Description 高一一班 ...

  8. happiness[国家集训队2011(吴确)]

    [试题来源] 2011中国国家集训队命题答辩 [问题描述] 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科 ...

  9. 夯实基础项目工程之图论——Uncle Bogdan and Country Happiness,Graph Coloring,How Many Paths?,Array Differentiation

    文章目录 做题情况项目报告 Uncle Bogdan and Country Happiness Graph Coloring How Many Paths? Array Differentiatio ...

最新文章

  1. 小程序 缩放_缩放流星应用程序的初体验
  2. 2020-10-09
  3. java web开发技巧_java web开发技巧
  4. Nginx学习_狂神
  5. Java教程:使用记事本编写运行Java程序
  6. SCUT - 290 - PARCO的因数游戏 - 博弈论
  7. IT技术图书之《敏捷无敌》当小说看 你信吗?
  8. 用批处理开启或关闭windows 服务
  9. wpf 点击某控件范围之外的区域 该控件隐藏_手机键盘交互细节:视觉效果与触发区域之间的交互逻辑...
  10. 如何从零开始系统运营微信公众号?
  11. FPGA实现全流水arccos,arcsin,任意次开放操作
  12. 挖掘数百万参与的IMVU用户
  13. 扒一扒:2020台湾Android-Kotlin--Java-面試題庫,竟如此--
  14. win10资源管理器——删除左侧图标(自用)
  15. 平面设计常见的配色方案及色标
  16. 国科gk7102s-sensor框架驱动笔记
  17. 使用chrome调试手机,平板,pc上各种浏览器上的页面
  18. GPS坐标转换腾讯地图坐标,并取地址
  19. 理想与现实的巨大差距
  20. 蓝桥杯直播课(软件开发类)记录2021-3-13

热门文章

  1. 相邻位数字差值的绝对值不能超过_热点争议中技术问题,伺服控制有几个零点?对应真绝对值多圈编码器意义...
  2. ipconfig不是内部或外部_晶振有什么作用,如何选择合适的晶振,为什么有时候用内部晶振?...
  3. 三、Java 面向对象高级——数据结构、List、Set、Collection
  4. PageRank 算法
  5. LeetCode 506. 相对名次(map)
  6. LeetCode 1411. 给 N x 3 网格图涂色的方案数(数学)
  7. LeetCode 462. 最少移动次数使数组元素相等 II(数学)
  8. LeetCode 700. 二叉搜索树中的搜索
  9. 朵唯机器人怎么连网_平遥古城推出机器人导游 可伴游还可骑行
  10. java之NIO(Channel,Buffer,Selector)