[bzoj2127]happiness
来自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相关推荐
- bzoj2127 happiness 最小割
不要往费用流上想,要往最小割上想,舍弃的权值最小,然后就想一下放到哪边有哪些贡献,不同位置会割掉不同贡献的边, 然后枚举各种割的情况,赋边权就可以了 码: #include<iostream&g ...
- bzoj2127: happiness
跟上题(文理分科)几乎一样啊. 结果findflow没有h[x]==0 T了N次... #include<cstdio> #include<iostream> #include ...
- 【BZOJ2127】happiness(网络流dinic)
题目描述 传送门 题解 最小割,割掉的是舍弃的喜悦值. 从s向每一个人连边,容量为这个人学文的喜悦值:从每个人向t连边,容量为这个人学理的喜悦值. 处理两个人共同学文或学理的喜悦值的话,可以每两个人增 ...
- 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. ...
- 基于bert模型的文本分类研究:“Predict the Happiness”挑战
1. 前言 在2018年10月,Google发布了新的语言表示模型BERT-"Bidirectional Encoder Representations from Transformers& ...
- 1463. Happiness to People!
http://acm.timus.ru/problem.aspx?space=1&num=1463 树形DP 此题有个陷阱 就是图的本身是一个森林 不是树 由于所有 happiness 的 ...
- BZOJ 2127: happiness
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MB Submit: 2084 Solved: 1028 Description 高一一班 ...
- happiness[国家集训队2011(吴确)]
[试题来源] 2011中国国家集训队命题答辩 [问题描述] 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科 ...
- 夯实基础项目工程之图论——Uncle Bogdan and Country Happiness,Graph Coloring,How Many Paths?,Array Differentiation
文章目录 做题情况项目报告 Uncle Bogdan and Country Happiness Graph Coloring How Many Paths? Array Differentiatio ...
最新文章
- 小程序 缩放_缩放流星应用程序的初体验
- 2020-10-09
- java web开发技巧_java web开发技巧
- Nginx学习_狂神
- Java教程:使用记事本编写运行Java程序
- SCUT - 290 - PARCO的因数游戏 - 博弈论
- IT技术图书之《敏捷无敌》当小说看 你信吗?
- 用批处理开启或关闭windows 服务
- wpf 点击某控件范围之外的区域 该控件隐藏_手机键盘交互细节:视觉效果与触发区域之间的交互逻辑...
- 如何从零开始系统运营微信公众号?
- FPGA实现全流水arccos,arcsin,任意次开放操作
- 挖掘数百万参与的IMVU用户
- 扒一扒:2020台湾Android-Kotlin--Java-面試題庫,竟如此--
- win10资源管理器——删除左侧图标(自用)
- 平面设计常见的配色方案及色标
- 国科gk7102s-sensor框架驱动笔记
- 使用chrome调试手机,平板,pc上各种浏览器上的页面
- GPS坐标转换腾讯地图坐标,并取地址
- 理想与现实的巨大差距
- 蓝桥杯直播课(软件开发类)记录2021-3-13
热门文章
- 相邻位数字差值的绝对值不能超过_热点争议中技术问题,伺服控制有几个零点?对应真绝对值多圈编码器意义...
- ipconfig不是内部或外部_晶振有什么作用,如何选择合适的晶振,为什么有时候用内部晶振?...
- 三、Java 面向对象高级——数据结构、List、Set、Collection
- PageRank 算法
- LeetCode 506. 相对名次(map)
- LeetCode 1411. 给 N x 3 网格图涂色的方案数(数学)
- LeetCode 462. 最少移动次数使数组元素相等 II(数学)
- LeetCode 700. 二叉搜索树中的搜索
- 朵唯机器人怎么连网_平遥古城推出机器人导游 可伴游还可骑行
- java之NIO(Channel,Buffer,Selector)