题目戳我

\(\text{Solution:}\)

显然还是一个分组问题。对于理科和文科我们可以看出最小割模型,而处理同时选择某一学科的时候,需要我们根据套路建立虚点处理。

同 小M的作物 一题,这题只不过是组数多了一点。

笔者前几次\(\color{red}{\text{WA}}\)是因为汇点编号小了,值得反思与铭记……

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN=5e5+10;
int tot=1,head[5000010],Ans;
int cur[MAXN],dep[MAXN];
int n,m,S,T,id;
const int inf=(1LL<<60);
struct E{int nxt,to,flow;}e[5000100];
inline void add(int x,int y,int w){
e[++tot].to=y;e[tot].nxt=head[x];e[tot].flow=w;head[x]=tot;
e[++tot].to=x;e[tot].nxt=head[y];e[tot].flow=0;head[y]=tot;
}
bool bfs(int s,int t){
memset(dep,0,sizeof dep);
queue<int>q;q.push(s);
cur[s]=head[s];dep[s]=1;
for(;!q.empty();){
s=q.front();q.pop();
for(int i=head[s];i;i=e[i].nxt){
int j=e[i].to;
if(!dep[j]&&e[i].flow){
cur[j]=head[j];
dep[j]=dep[s]+1;
if(j==t)return true;
q.push(j);
}
}
}
return false;
}
int dfs(int s,int flow,int t){
if(flow<=0||s==t)return flow;
int rest=flow;
for(int i=cur[s];i;i=e[i].nxt){
int j=e[i].to;
if(dep[j]==dep[s]+1&&e[i].flow){
int tmp=dfs(j,min(rest,e[i].flow),t);
if(tmp<=0)dep[j]=0;
rest-=tmp;e[i].flow-=tmp;e[i^1].flow+=tmp;
if(rest<=0)break;
}
}
return flow-rest;
}
int dinic(int s,int t){
int ans=0;
for(;bfs(s,t);)ans+=dfs(s,inf,t);
return ans;
}
inline int pos(int i,int j){return (i-1)*m+j;}
inline int build(){return (++id);}
signed main(){
scanf("%lld%lld",&n,&m);
S=0,T=n*m+2*n*(m-1)+2*(n-1)*m+1;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j){
int x;
scanf("%lld",&x);
Ans+=x;
add(S,pos(i,j),x);
}
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j){
int x;
scanf("%lld",&x);
Ans+=x;
add(pos(i,j),T,x);
}
id=n*m;
for(int i=1;i<n;++i)
for(int j=1;j<=m;++j){
int P=build(),x;
scanf("%lld",&x);
Ans+=x;
add(S,P,x);
add(P,pos(i,j),inf);
add(P,pos(i+1,j),inf);
}
for(int i=1;i<n;++i)
for(int j=1;j<=m;++j){
int x,P=build();
scanf("%lld",&x);
Ans+=x;
add(P,T,x);
add(pos(i,j),P,inf);
add(pos(i+1,j),P,inf);
}
for(int i=1;i<=n;++i)
for(int j=1;j<m;++j){
int P=build(),x;
scanf("%lld",&x);
Ans+=x;
add(S,P,x);
add(P,pos(i,j),inf);
add(P,pos(i,j+1),inf);
}
for(int i=1;i<=n;++i)
for(int j=1;j<m;++j){
int P=build(),x;
scanf("%lld",&x);
Ans+=x;
add(P,T,x);
add(pos(i,j),P,inf);
add(pos(i,j+1),P,inf);
}
printf("%lld\n",Ans-dinic(S,T));
return 0;
}

【题解】[国家集训队]happiness的更多相关文章

  1. 题解-[国家集训队]Crash的数字表格 / JZPTAB

    题解-[国家集训队]Crash的数字表格 / JZPTAB 前置知识: 莫比乌斯反演 </> [国家集训队]Crash的数字表格 / JZPTAB 单组测试数据,给定 \(n,m\) ,求 ...

  2. [国家集训队]happiness

    嘟嘟嘟 就这么建. --- #include<cstdio> #include<iostream> #include<cmath> #include<algo ...

  3. [国家集训队]happiness 最小割 BZOJ 2127

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

  4. BZOJ 2127 / Luogu P1646 [国家集训队]happiness (最小割)

    题面 BZOJ传送门 Luogu传送门 分析 这道题又出现了二元关系,于是我们只需要解方程确定怎么连边就行了 假设跟SSS分在一块是选文科,跟TTT分在一块是选理科,先加上所有的收益,再来考虑如何让需 ...

  5. luogu P1646 [国家集训队]happiness (最小割)

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

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

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

  7. 【题解】P1407国家集训队稳定婚姻

    [题解][P1407 国家集训队]稳定婚姻 很好的一道建模+图论题. 婚姻关系?很像二分图匹配呀,不过不管怎么办先建模再说.婚姻关系显然用图方面的知识解决.建图! 它给定的是字符串,所以我们使用\(a ...

  8. P2634 [国家集训队]聪聪可可(题解)(点分治)

    P2634 [国家集训队]聪聪可可(题解)(点分治) 洛谷题目 #include<iostream> #include<cstdlib> #include<cstdio& ...

  9. 【题解】国家集训队礼物(Lucas定理)

    [国家集训队]礼物(扩展Lucas定理) 传送门可以直接戳标题 172.40.23.20 24 .1 答案就是一个式子: \[ {n\choose \Sigma_{i=1}^m w}\times\pr ...

随机推荐

  1. java服务端实现微信小程序内容安全

    请参考微信官方文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.i ...

  2. unity 对Animator动画系统的研究

    unity的新动画系统叫Mecanim,使用Animator来取代旧系统Animation,按Unity文档的惯例:知识点主要分2部分:unity manual和unity script,读者可以边看 ...

  3. 【已学完】UGUI Schedule

    章节 内容 签到 Unity4.6 New UI(UGUI) 1.UGUI概述与Canvas画布介绍(一) 5月14日 2.Canvas画布介绍(二) 5月14日 3.Text控件 5月14日 4.I ...

  4. mysql必知必会——GROUP BY和HAVING

    mysql必知必会——GROUP BY和HAVING 创建表结构 create table `employ_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, ...

  5. MAC 上编译安装nginx-rtmp-module 流媒体服务器

    MAC 上编译安装nginx-rtmp-module 流媒体服务器 记录踩坑过程 下载nginx和nginx-rtmp-module wget http://nginx.org/download/ng ...

  6. 实际项目中遇到EF实体类的操作问题及操作方法

    之前一直做ASP,都是直接写数据库操作语句,但是现在使用linq或者EF了,具体数据库操作不会了,遇到几个问题,然后经过查找资料解决了,记录一下. 一.遇到序列化问题 遇到循环引用问题,我的项目是一个 ...

  7. CTF资源

    WINDOWS 逆向工程师技能表 https://www.sec-wiki.com/skill/6 Software-Security-Learning https://chybeta.github. ...

  8. odoo10同一模型的不同视图不同群组权限控制

    先描述下需求: 一个模型定义两个calendar视图,其中A视图G1群组可以CRUD操作,但是不显示特殊字段spec_field,对于B视图G1群组只能查看,G2群组只能修改其中的特殊字段spec_f ...

  9. JumpServer 架构浅解

    Jumpserver 是一款由python编写开源的跳板机(堡垒机)系统,实现了跳板机应有的功能.基于ssh协议来管理,客户端无需安装agent.完全开源,GPL授权 设计思路 设计一个跳转网关,所有 ...

  10. Java SPI详细的例子

    先翻一个来自于Baeldung的介绍: 为了更通俗易懂我就没有直译,如果有不严谨的地方请大神指教. JavaSPI的定义 Java SPI defines four main components S ...