[国家集训队] happiness 题解
发现可以做如下建图:
对于前两组输入,从 \(s\) 向所有代表学生的点连一条边,容量为其学习文科的喜悦值;从所有代表学生的点向 \(t\) 连一条边,容量为其学习理科的最大值。
对于后四组输入,建两个点 \(x,y\),从 \(s\) 向 \(x\),从 \(y\) 向 \(t\) 分别连容量为相邻两人同时学文/理时额外喜悦值的一条边,\(x\) 向这两个学生各连一条无限长的边,这两个学生再向 \(y\) 连一条无限长的边。
直接拿总喜悦值减去最小割即可。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+5,M=5e6+5;
int n,m,s,t,k=1,h[N],d[N],cnt;
int c[N],to[M],nxt[M],w[M];
void add(int x,int y,int z){
to[++k]=y;w[k]=z;
nxt[k]=h[x];h[x]=k;
to[++k]=x;w[k]=0;
nxt[k]=h[y];h[y]=k;
}int bfs(){
memset(c,-1,sizeof(c));
queue<int>q;c[s]=0;
q.push(s);d[s]=h[s];
while(q.size()){
int x=q.front();q.pop();
for(int i=h[x];i;i=nxt[i]){
int y=to[i];int lv=w[i];
if(lv>0&&c[y]==-1){
c[y]=c[x]+1;d[y]=h[y];
q.push(y);if(y==t) return 1;
}
}
}return 0;
}int dfs(int x,int ans){
if(x==t) return ans;
int sum=ans;
for(int i=d[x];i&∑i=nxt[i]){
d[x]=i;int y=to[i];int lv=w[i];
if(lv<1||c[y]!=c[x]+1) continue;
int zjy=dfs(y,min(sum,lv));
sum-=zjy;w[i]-=zjy;w[i^1]+=zjy;
}return ans-sum;
}int dinic(){
int re=0;
while(bfs())
re+=dfs(s,1e9);
return re;
}int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m;t=100000;
int ans=0;cnt=n*m;
for(int i=1;i<=n;i++)
for(int j=1,x;j<=m;j++)
cin>>x,add(s,(i-1)*m+j,x),ans+=x;
for(int i=1;i<=n;i++)
for(int j=1,x;j<=m;j++)
cin>>x,add((i-1)*m+j,t,x),ans+=x;
for(int i=1;i<n;i++)
for(int j=1,x;j<=m;j++){
cin>>x;ans+=x;
add(s,++cnt,x);
add(cnt,(i-1)*m+j,1e9);
add(cnt,i*m+j,1e9);
}
for(int i=1;i<n;i++)
for(int j=1,x;j<=m;j++){
cin>>x;ans+=x;
add(++cnt,t,x);
add((i-1)*m+j,cnt,1e9);
add(i*m+j,cnt,1e9);
}
for(int i=1;i<=n;i++)
for(int j=1,x;j<m;j++){
cin>>x;ans+=x;
add(s,++cnt,x);
add(cnt,(i-1)*m+j,1e9);
add(cnt,(i-1)*m+j+1,1e9);
}
for(int i=1;i<=n;i++)
for(int j=1,x;j<m;j++){
cin>>x;ans+=x;
add(++cnt,t,x);
add((i-1)*m+j,cnt,1e9);
add((i-1)*m+j+1,cnt,1e9);
}
cout<<ans-dinic();
return 0;
}
[国家集训队] happiness 题解的更多相关文章
- 【题解】[国家集训队]happiness
题目戳我 \(\text{Solution:}\) 显然还是一个分组问题.对于理科和文科我们可以看出最小割模型,而处理同时选择某一学科的时候,需要我们根据套路建立虚点处理. 同 小M的作物 一题,这题 ...
- [国家集训队]happiness
嘟嘟嘟 就这么建. --- #include<cstdio> #include<iostream> #include<cmath> #include<algo ...
- [国家集训队]happiness 最小割 BZOJ 2127
题目描述 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文 ...
- BZOJ 2127 / Luogu P1646 [国家集训队]happiness (最小割)
题面 BZOJ传送门 Luogu传送门 分析 这道题又出现了二元关系,于是我们只需要解方程确定怎么连边就行了 假设跟SSS分在一块是选文科,跟TTT分在一块是选理科,先加上所有的收益,再来考虑如何让需 ...
- luogu P1646 [国家集训队]happiness (最小割)
高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文科或者理科 ...
- Luogu2839 [国家集训队]middle 题解
题目很好,考察对主席树的深入理解与灵活运用. 首先看看一般解决中位数的思路,我们二分一个 \(mid\),将区间中 \(\ge mid\) 的数置为 \(1\),小于的置为 \(-1\),然后求区间和 ...
- happiness[国家集训队2011(吴确)]
[试题来源] 2011中国国家集训队命题答辩 [问题描述] 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科 ...
- 【题解】P1407国家集训队稳定婚姻
[题解][P1407 国家集训队]稳定婚姻 很好的一道建模+图论题. 婚姻关系?很像二分图匹配呀,不过不管怎么办先建模再说.婚姻关系显然用图方面的知识解决.建图! 它给定的是字符串,所以我们使用\(a ...
- P2634 [国家集训队]聪聪可可(题解)(点分治)
P2634 [国家集训队]聪聪可可(题解)(点分治) 洛谷题目 #include<iostream> #include<cstdlib> #include<cstdio& ...
- 题解-[国家集训队]Crash的数字表格 / JZPTAB
题解-[国家集训队]Crash的数字表格 / JZPTAB 前置知识: 莫比乌斯反演 </> [国家集训队]Crash的数字表格 / JZPTAB 单组测试数据,给定 \(n,m\) ,求 ...
随机推荐
- HTML5 多媒体
1.互联网上的音频 直到现在,仍然不存在一项旨在网页上播放音频的标准. 今天,大多数音频是通过插件(比如 Flash)来播放的.然而,并非所有浏览器都拥有同样的插件. HTML5 规定了在网页上嵌入音 ...
- 云主机安装Redis,基于CodeArts模拟电商平台秒杀抢购
本文分享自华为云社区<云主机安装Redis并模拟电商平台秒杀抢购场景>,作者:开发者空间小蜜蜂. 1.1 案例介绍 Redis 是一个高性能的key-value数据库.Redis支持各种不 ...
- Dapr-2: 世界是分布式的
第 2 章 世界是分布的 只需要问任何达人:现代的.分布式的系统已经到来,单体应用已经过时. 但是,不仅是达人,渐进的 IT 领袖,企业架构师,以及精明的开发者,在探寻和评估现代分布式应用的时候,也在 ...
- 升级到 .NET Core 3.1
微软升级的频率有点快,转眼 .NET Core 升级到 3.1 版了,这是一个长期支持版本,意味着 .NET Core 正式进入成熟期. 不过,对于开发人员来说,你的项目又需要迁移了. 升级项目文件 ...
- 两个 F# 的 MVVM
fsprojects/Avalonia.FuncUI: Develop cross-plattform GUI Applications using F# and Avalonia! fabulous ...
- JVM简介—3.JVM的执行子系统
大纲 1.Class文件结构 2.Class文件格式概述 3.Class文件格式详解 4.字节码指令 5.类的生命周期和初始化 6.类加载的全过程 7.类加载器 8.双亲委派模型 9.栈桢详解 11. ...
- Anaconda下载安装及Spyder使用Python
第一:选择编程语言, C++ Java Python等,量化交易广泛使用Python开发策略. 第二:选择软件,Anaconda 或者 PyCharm,龙哥选用Anaconda,因为 Anaconda ...
- Qt音视频开发10-ffmpeg内核硬解码
一.前言 为了极大的降低CPU的占用,实现硬解码(也叫硬件加速)非常有必要,一个视频文件或者一路视频流还好,如果增加到64路视频流呢,如果是4K.8K这种高分辨率的视频呢,必须安装上硬解码才是上上策. ...
- Qt编写可视化大屏电子看板系统32-模块10大屏地图
一.前言 大屏地图模块采用浏览器模块+echart组件,Qt自带了webkit或者webengine模块,其中在win上mingw编译器的Qt5.6以后的版本,没有了浏览器模块,这个就需要用第三方的浏 ...
- Qt编写安防视频监控系统63-子模块7悬浮地图
一.前言 悬浮地图子模块,使用的百度地图,支持在线和离线,用于显示对应设备的位置,支持鼠标直接拖动和缩放.本系统将各个地方需要的地图模块+浏览器模块都合并到一个地图内核模块,这样需要使用的时候只需要n ...