happiness[国家集训队2011(吴确)]
【试题来源】
【问题描述】
【输入格式】
接下来是六个矩阵
第一个矩阵为n行m列 此矩阵的第i行第j列的数字表示座位在第i行第j列的同学选择文科获得的喜悦值。
第二个矩阵为n行m列 此矩阵的第i行第j列的数字表示座位在第i行第j列的同学选择理科获得的喜悦值。
第三个矩阵为n-1行m列 此矩阵的第i行第j列的数字表示座位在第i行第j列的同学与第i+1行第j列的同学同时选择文科获得的额外喜悦值。
第四个矩阵为n-1行m列 此矩阵的第i行第j列的数字表示座位在第i行第j列的同学与第i+1行第j列的同学同时选择理科获得的额外喜悦值。
第五个矩阵为n行m-1列 此矩阵的第i行第j列的数字表示座位在第i行第j列的同学与第i行第j+1列的同学同时选择文科获得的额外喜悦值。
第六个矩阵为n行m-1列 此矩阵的第i行第j列的数字表示座位在第i行第j列的同学与第i行第j+1列的同学同时选择理科获得的额外喜悦值。
【输出格式】
【样例输入】
1 1
100 110
1
1000
【样例输出】
【样例说明】
【数据规模和约定】
对于30%以内的数据,n,m<=8
对于100%以内的数据,n,m<=100 数据保证答案在2^30以内
对于100%的数据,时间限制为0.5s。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int sj=;
int n,m,sx[sj][sj],e,h[sj*sj],s,t,dep[sj*sj];
int w[sj][sj],l[sj][sj],g[sj][sj],z[sj][sj],a1,ans;
struct B
{
int ne,v,w;
}b[sj*sj*];
queue<int> q;
void add(int x,int y,int z)
{
b[e].v=y;
b[e].w=z;
b[e].ne=h[x];
h[x]=e++;
}
void init()
{
scanf("%d%d",&n,&m);
t=n*m+;
memset(h,-,sizeof(h));
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
scanf("%d",&w[i][j]);
sx[i][j]=(i-)*m+j;
ans+=w[i][j];
w[i][j]*=;
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
scanf("%d",&l[i][j]);
ans+=l[i][j];
l[i][j]*=;
}
for(int i=;i<n;i++)
for(int j=;j<=m;j++)
{
scanf("%d",&a1);
ans+=a1;
g[i][j]=a1;
w[i][j]+=a1;
w[i+][j]+=a1;
}
for(int i=;i<n;i++)
for(int j=;j<=m;j++)
{
scanf("%d",&a1);
ans+=a1;
g[i][j]+=a1;
l[i][j]+=a1;
l[i+][j]+=a1;
add(sx[i][j],sx[i+][j],g[i][j]);
add(sx[i+][j],sx[i][j],g[i][j]);
}
for(int i=;i<=n;i++)
for(int j=;j<m;j++)
{
scanf("%d",&a1);
ans+=a1;
z[i][j]=a1;
w[i][j]+=a1;
w[i][j+]+=a1;
add(s,sx[i][j],w[i][j]);
add(sx[i][j],s,);
}
for(int i=;i<=n;i++)
{
add(s,sx[i][m],w[i][m]);
add(sx[i][m],s,);
}
for(int i=;i<=n;i++)
for(int j=;j<m;j++)
{
scanf("%d",&a1);
ans+=a1;
z[i][j]+=a1;
l[i][j]+=a1;
l[i][j+]+=a1;
add(t,sx[i][j],);
add(sx[i][j],t,l[i][j]);
add(sx[i][j],sx[i][j+],z[i][j]);
add(sx[i][j+],sx[i][j],z[i][j]);
}
for(int i=;i<=n;i++)
{
add(sx[i][m],t,l[i][m]);
add(t,sx[i][m],);
}
ans*=;
}
bool bfs(int x)
{
while(!q.empty()) q.pop();
memset(dep,,sizeof(dep));
dep[x]=;
q.push(x);
while(!q.empty())
{
x=q.front();
q.pop();
for(int i=h[x];i!=-;i=b[i].ne)
if(!dep[b[i].v]&&b[i].w)
{
dep[b[i].v]=dep[x]+;
if(b[i].v==t) return ;
q.push(b[i].v);
}
}
return ;
}
int bj(int x,int y)
{
return x<y?x:y;
}
int dfs(int x,int f)
{
if(x==t) return f;
int ans=,d;
for(int i=h[x];i!=-;i=b[i].ne)
if(dep[b[i].v]==dep[x]+&&b[i].w)
{
d=dfs(b[i].v,bj(f,b[i].w));
f-=d;
ans+=d;
b[i].w-=d;
b[i^].w+=d;
if(!f) break;
}
if(!ans) dep[x]=-;
return ans;
}
int main()
{
init();
while(bfs(s)) ans-=dfs(s,0x7fffffff);
printf("%d",ans/);
return ;
}
happiness
happiness[国家集训队2011(吴确)]的更多相关文章
- AC日记——[国家集训队2011]旅游(宋方睿) cogs 1867
[国家集训队2011]旅游(宋方睿) 思路: 树链剖分,边权转点权: 线段树维护三个东西,sum,max,min: 当一个区间变成相反数时,sum=-sum,max=-min,min=-max: 来, ...
- cogs 1901. [国家集训队2011]数颜色
Cogs 1901. [国家集训队2011]数颜色 ★★★ 输入文件:nt2011_color.in 输出文件:nt2011_color.out 简单对比时间限制:0.6 s 内存限制 ...
- BZOJ 2150 cogs 1861 [国家集训队2011]部落战争
题目描述 lanzerb的部落在A国的上部,他们不满天寒地冻的环境,于是准备向A国的下部征战来获得更大的领土. A国是一个M*N的矩阵,其中某些地方是城镇,某些地方是高山深涧无人居住.lanzerb把 ...
- COGS1882 [国家集训队2011]单选错位
★ 输入文件:nt2011_exp.in 输出文件:nt2011_exp.out 简单对比时间限制:1 s 内存限制:512 MB [试题来源] 2011中国国家集训队命题答辩 [问题 ...
- 1893. [国家集训队2011]等差子序列(bitset)
★★ 输入文件:nt2011_sequence.in 输出文件:nt2011_sequence.out 简单对比时间限制:0.3 s 内存限制:512 MB [试题来源] 2011中国 ...
- 【COGS 1873】 [国家集训队2011]happiness(吴确) 最小割
这是一种最小割模型,就是对称三角,中间双向边,我们必须满足其最小割就是满足题目条件的互斥关系的最小舍弃,在这道题里面我们S表示文T表示理,中间一排点是每个人,每个人向两边连其选文或者选理的价值,中间每 ...
- [国家集训队2011]happiness
Description 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友 ...
- bzoj2144 【国家集训队2011】跳跳棋
Description 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子.我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置.我们要通过最少的跳动把他 ...
- COGS.1901.[模板][国家集训队2011]数颜色(带修改莫队)
题目链接 COGS BZOJ2120 洛谷P1903 /* Add和Subd函数中的vis不能直接设为=1或=0 比如 l=1,r=0 -> l=3,r=5 时,[1,5]的vis标记全都是1 ...
随机推荐
- MongoDB-配置翻译
Configuration File(配置文件) File Format(文件格式) Use the Configuration File(使用配置文件) Core Options(核心设置) sys ...
- 【转载】The Elements of Programming Style之代码风格金科玉律
原始日期: 2017-02-06 16:20 <The Elements of Programming Style >是一本很古老的书.尽管 Fortran 我们不太使用,尽管新奇的语言层 ...
- Xcode9新特性介绍-中文篇
背景: Xcode 9 新特性介绍: 1.官方原文介绍链接 2.Xcode9 be ta 2 官方下载链接 本文为官方介绍翻译而来,布局排版等都是按照官方布局来的. 与原文相比,排版上基本还是熟悉的配 ...
- 开源框架GreenDao的操作
1.为什么需要GreenDao?Google原生API不方便 @1手动组拼SQL语句 @2需要自己写操作数据库代码 @3不能把数据库中的数据映射成对象 @4没有实现关联查询 2.GreenDao是什么 ...
- IE11中navigator.userAgent的变化
在原来判断浏览器是否是ie时,我们可以根据navigator.userAgent中时候有MSIE,但是IE11进行变革,userAgent中不在包含MSIE字段, 在实际项目中,入到类似的在控制台报错 ...
- Swift三元条件运算
三元条件运算的特殊在于它是有三个操作数的运算符,它的原型是问题?答案1:答案2.它简洁地表达根据问题成立与否作出二选一的操作.如果问题成立,返回答案1的结果; 如果不成立,返回答案2的结果. 使用三元 ...
- 表连接查询(2-n)
一 概述 1 背景 理论上将全部数据放到同一张表中很难实现,实际上即使实现了,表也很庞大,很冗杂,不便于查询与维护,因此将不同的数据存放到不同的表中,需要时连接各表进行查询. 2 执行过程 两张表进行 ...
- 【LeetCode】73. Set Matrix Zeroes
题目: Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. Fo ...
- 3.jsp基本语法笔记
1.page标签 <%@ page language="java" import="java.util.*" contentType="text ...
- 把本地git仓库中的项目引入到码云上
一.安装git软件和TortoiseGit客户端(git需配置环境变量,但安装时已经配置好,无需考虑) 二.生成公钥和私钥(建立与码云的连接) 三.在码云上新建项目(建议在组织的基础上) 四.在码 ...