/***************************************************************************************
去年网络赛的一道题,现在看来也不是很难。做个HDU上那道方格取数的话,这道题大致就有想法了,
但这道题有个问题是,必选点的处理,我的做法是如果该点为偶数点,则在源点与该点间建一条流量为oo
的边,如果该点为奇数点,则在该点与汇点间建一条流量为oo的边,这样就完美解决了必选点的问题,然
后就是用dinic求最大流,最后结果取反即可。1Y~
***************************************************************************************/
#include <iostream>
#include <cstring>
#include <memory>
#include <cstdio>
#include <queue>
using namespace std;
const int MAXN = 52;
const int MAXV = MAXN * MAXN;
const int MAXE = MAXV * 6;
const int oo = 0x3f3f3f3f;
struct Edges
{
int end;
int flow;
int next;
}edges[MAXE];
int n, m, k, ecnt, head[MAXV], data[MAXN][MAXN];
int lev[MAXV];
bool sign[MAXN][MAXN];
const int dir[4][2] = {-1, 0, 0, -1, 1, 0, 0, 1};
inline void add_edge(int u, int v, int f)
{
//printf("edge: u = %d, v = %d, f = %d\n", u, v, f);
edges[ecnt].end = v;
edges[ecnt].flow = f;
edges[ecnt].next = head[u];
head[u] = ecnt++;
edges[ecnt].end = u;
edges[ecnt].flow = 0;
edges[ecnt].next = head[v];
head[v] = ecnt++;
return ;
}
inline bool allow(int x, int y)
{
return x >= 0 && x < n && y >= 0 && y < m;
}
void init()
{
ecnt = 0;
memset(head, -1, sizeof(head));
memset(sign, false, sizeof(sign));
return ;
}
bool bfs(int src, int sink)
{
int crt, nxt, val;
queue<int>Q;
memset(lev, -1, sizeof(lev));
lev[src] = 0;
Q.push(src);
while (!Q.empty())
{
crt = Q.front();
Q.pop();
for (int i = head[crt]; i != -1; i = edges[i].next)
{
nxt = edges[i].end;
val = edges[i].flow;
if (-1 == lev[nxt] && val > 0)
{
lev[nxt] = lev[crt] + 1;
Q.push(nxt);
}
}
}
return (lev[sink] != -1);
}
int dfs(int crt, int sink, int flow)
{
if (crt == sink)
{
return flow;
}
int nxt, val;
int tf = 0, f;
for (int i = head[crt]; i != -1; i = edges[i].next)
{
nxt = edges[i].end;
val = edges[i].flow;
if (lev[nxt] == lev[crt] + 1 && val > 0 && tf < flow && (f = dfs(nxt, sink, min(val, flow - tf))))
{
edges[i].flow -= f;
edges[i ^ 1].flow += f;
tf += f;
}
}
return tf;
}
int dinic(int src, int sink)
{
int res = 0;
while (bfs(src, sink))
{
res += dfs(src, sink, oo);
}
return res;
}
void ace()
{
int src, sink, a, b;
int u, v;
int res;
while (scanf("%d %d %d", &n, &m, &k) != EOF)
{
init();
src = n * m;
sink = src + 1;
res = 0;
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < m; ++j)
{
scanf("%d", &data[i][j]);
res += data[i][j];
}
}
while (k--)
{
scanf("%d %d", &a, &b);
--a;
--b;
sign[a][b] = true;
}
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < m; ++j)
{
u = i * m + j;
if (~(i + j) & 0x1)
{
add_edge(src, u, sign[i][j] ? oo : data[i][j]);
for (int k = 0; k < 4; ++k)
{
int ti = i + dir[k][0], tj = j + dir[k][1];
if (!allow(ti, tj))
{
continue ;
}
v = ti * m + tj;
add_edge(u, v, (data[i][j] & data[ti][tj]) << 1);
}
}
else
{
add_edge(u, sink, sign[i][j] ? oo : data[i][j]);
}
}
}
int buf = dinic(src, sink);
//printf("buf:%d\n", buf);
printf("%d\n", res - buf);
}
return ;
}
int main()
{
ace();
return 0;
}
相关推荐
R语言maftools包实战:5分钟搞定TCGA癌症突变数据可视化(附完整代码)
本文详细介绍了如何使用R语言的maftools包快速解析和可视化TCGA癌症突变数据。通过实战演示,从环境搭建、数据导入到核心可视化(如瀑布图、棒棒糖图)和深度统计分析(如生存分析、突变特征),帮助生物信息学研究者高效完成癌症基因组学分析,大幅提升从原始MAF数据到发表级图表的效率。
hdu 3657(最大点权独立集)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3657 思路我就不详细讲了,这位大牛讲的很清楚:http://blog.youkuaiyun.com/cold__v__moon/article/details/7924269 View Code 1 #include<iostream> 2 #include<cstdio&...
Qt思岚激光雷达
Qt关于思岚激光雷达研究示例,本示例采用qt界面开发,可以串口也可以tcp进行设备连接。接收数据进行相关的数据进行绘图, 这种雷达可以用于大屏触摸场景,会场互动触摸场景开发。 #ifndef MAINWIDGET_H #define MAINWIDGET_H #include <QTimer> #include <QWidget> #include "lidarmgr.h" namespace Ui { class MainWidget; } class MainWidget.
hdu 3657 最小割(牛逼!!!!)总算理解了
<strong></strong>转载:http://blog.youkuaiyun.com/me4546/article/details/6662959 加颜色的太棒了!!! 在网上看到的一句话恍然大悟啊,建立一个最小割模型之后,假设x点与源点是连着的,说明你是把x点给取到手了,不连,说明你是把x点去除,之前一直不太明白边的容量是怎么来确定的,现在知道了,方格取数是相邻两...
ANC降噪学习
概述 ANC,英文名称:Active Noise Control,主动降噪。其原理是降噪系统电路产生降噪MIC接收的外界环境噪音相等的反相信号,将噪声抵消。核心算法 ANC降噪实现核心算法为:FxLMS(最小均方差算法)。最小均方差算法以均方误差为代价函数,并使误差降到最小的算法。 具体算法推导这里不做具体介绍,这里直接列出表达式: ...
VMD-CNN-BiLSTM-Attention预测模型 —— 数学模型介绍&完整实例代码
想解决电力负荷预测中的非线性、非平稳难题?这篇博客介绍了一种创新混合模型,结合变分模态分解(VMD)和CNN-BiLSTM-Attention深度学习架构,实现超高精度预测! ✨ 核心亮点: ✅ VMD分解:有效分离复杂负荷信号,提取关键频率特征 ✅ 混合深度学习:CNN捕捉局部模式 + BiLSTM学习长时序依赖 + 注意力机制聚焦关键时段 ✅ 端到端优化:从数据预处理(滑动窗口、归一化)到模型训练(MSE损失+Adam优化),完整流程公开! ✅ 工业级评估:提供MSE、MAE、MAPE、R²多指标验证
hdu 3657 Game(最小割,方格取数)
题目:http://acm.split.hdu.edu.cn/showproblem.php?pid=3657 比起3820简单多了,还是方格取数,奇偶建图,要求取的点连inf。 不过貌似Dinic不能取重边,连inf时多建了边wa了,只好加一个flag数组。 #include #include #include #include #include #include #define mem(
Decoder如何工作、Transformer如何训练、以及exposure bias问题
1、结合图文描述Decoder中各个模块是什么,以及是如何工作的。2、transformer是如何训练的。3、exposure bias问题造成的原因及解决方法
HDU3657 Game(最小割)
Game Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1313 Accepted Submission(s): 553 Problem Description onmylove has invented a
thinkcmf 代码执行 (CVE-2019-7580) 漏洞复现
所有文章,仅供安全研究与学习之用,后果自负! thinkcmf 代码执行 CVE-2019-7580thinkcmf 代码执行 (CVE-2019-7580)0x01 漏洞描述0x02 影响范围0x03 漏洞复现3.1 登录后台3.2 漏洞利用3.2.1webshell3.2 phpinfo3.3 获取系统命令0x04 漏洞修复 thinkcmf 代码执行 (CVE-2019-7580) 复现小心会搞崩环境。 0x01 漏洞描述 ThinkCMF是一款支持Swoole的开源内容管理框架(CMF),基于Thi
项目经理面试 5 大高频题 + 实战回答模板,帮你稳拿 offer
项目经理面试5大高频问题及应答技巧 摘要:本文总结了项目经理岗位常见的5个面试问题及回答策略,帮助求职者更有针对性地准备面试。核心问题包括:1)描述负责过的典型项目;2)常用项目管理工具;3)项目遇到的挑战及解决方案;4)风险管理方法;5)项目成功标准。每个问题都从面试官考察重点、回答技巧、实战案例三个维度进行分析,强调要用STAR法则(情境-任务-行动-结果)结构化表达,突出解决问题的能力而非简单罗列经历。特别提醒要量化项目成果(如提前2周上线、节省8%预算等),并注意展示商业思维和团队协作能力。
HDU - 3657
题目链接:HDU - 3657 先记录每个点的价值之和。 然后黑白染色。对于相邻的点,连流量为:2*(x&y)的边即可。 最后答案就是 tot-最小割 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> //#define int long long using ...
ArcGIS Pro 制作这种地图海报
ArcMap 版本与 ArcGIS Pro 版本的制图功能相差太多,无论从美观上还是制图效率都远远优于 ArcMap,用了一段时间的 ArcGIS Pro ,真心推荐有条件的大家赶紧试一试!一个软件也能搞定一张不错的海报哦!----吐槽:好的设计真的是门花时间的活,这个教程大概花了我7小时左右,我都忘了我自己教程中截图多少张了!(可能是我速度太慢了)测试数据:阿里云盘分享-----北极海冰数据.https://www.aliyundrive.com/s/SUhsnqfkmXh。
HDU 1565,1569,3657,3280,4307方格取数各种版本
大神 夏天的风 的网络流题集http://blog.youkuaiyun.com/shahdza/article/details/7779537 hdu 1565\1569属于比较简单的方格取数,二分图中:最大点权独立集 = 点权数 - 最大流(最小割)。另外1565也可以状态压缩DP做。 hdu 3657\4307 同属于公式化解类型 【hdu 3657 题意】N*M的方格里,每个数...
jdk-8u144-linux-x64.tar.gz.
该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包
数学建模模型总结
这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!
HDU 3657 Game 网络流--最大独立集
Game Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 668 Accepted Submission(s): 262 Problem Description onmylove has invented a game on
大中型超市收银系统(可直接运行)
光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开
HDU 3657 Game 网络流 方格取数类型
用模板就是爽! #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long LL; const int int_max = 0x07777777; const int int_min
温度PID控制PLC程序
温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值
深入理解最小割的意义
在做网络流题目的时候,我们时常因为无法正确建图而遗憾错过本应该的AC。 今天通过一些题目,我好好记录一下自己对最大流、最小割的学习感受。 Hdu 1565,题意: 给你一个矩阵,矩阵上每个点上都有一个数字,现在要你在矩阵中取一些数字,使得取得的数字和最大! 规则:相邻的格子不能同时取,即取了一个以后,它四周的数字便不能再取了。 分析:(题目实际就是求一个无向图的最大点权独立集) 这种方...
【HDU】3657 Game 最小割
传送门:【HDU】3657 Game 题目分析:
HDU 3657 Game
http://acm.hdu.edu.cn/showproblem.php?pid=3657 #include using namespace std; #define N 2550 #define M 2000000 #define inf 0x7fffffff struct
hdu 1569 and hdu 3657 最小割
给你一个m*n的格子的棋盘,每个格子里面有一个非负数。 从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取数所在的2个格子不能相邻,并且取出的数的和最大。
HDU3657Game(最大流)
这几天敲了几道最大流的问题,发现网络流真是模板算法啊。。。。 敲来敲去敲了几遍,基本每遍都敲得让人灰心,但同时也感受到了网络流的强大所在,这是我做网络流的第一题,,本以为看了一遍小白书的代码差不多理解就可以A掉一题的,没想到打击不是一点点的少啊。。。。。 首先小白书将的邻接矩阵存边,这里必须用邻接表,而本以为随便改改就好的,没想到那个记录路径却让人头疼得要命,无赖之下看了题解,看到了一个名为S...
hdu3657 奇偶方格取数
从n*m的方格中取数 取走一个数 你的总分数里就加上这个数 若取走一个数之后 出现了两个相邻的格子 那么你的总分数里就要减去2*(x&y) x和y分别为这两个格子中原本放的数 同时规定了k个数必须要取走 方格取数的题做法:横纵坐标和为奇数的点为X集合放在左边 为偶数的点为Y集合放在右边 源点与集合X里的点连边 权值为点的权值 集合Y里的点与汇点连边 权值为点的权值 然后X集
网络流题集【转】
博客原文:http://blog.youkuaiyun.com/shahdza/article/details/7779537 最近搞网络流。。觉得这篇博客总结的题集感觉很有用,mark转载下来 【HDU】 1532 Drainage Ditches(入门) [最大流] 3549 Flow Problem(入门) [最大流] 3572 Task Schedule(基础) [最大流
hdu3657 Game(最大点权独立集||最小割)
http://acm.hdu.edu.cn/showproblem.php?pid=3657 题意:方格取数,求取出的数和最大。取相邻的数要付出权值相与的代价,同时还要指定一些格子必须要取到。 思路:整体思路和hdu1565一样,看我的理解。保证某个点必须取那就连一条割不动的边,我们知道割不动的不会被算在最小花费,也就被算在最后的最大点权独立集。至于中间相邻格子的代价,把原先的割不
hdu 3657 game 最小割
#include #include #include using namespace std; typedef long long ll ; #define captype int const int MAXN = 40010; //点的总数 const int MAXM = 400010; //边的总数 const int INF = 1<<30; struct EDG{ i
HDU 3657 Game 最小割
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3657题意:给定一个n*m的方格,每个格子里有一个数,现在从里面去一些数字,使这些数字的和最大,其中若有两个格子相邻,则要减去2 * (v & u) ,另外规定有一些格子必须取思路:首先对格子二分建图,类似于最大权独立集,必须取的格子和源汇点连边时容量为无穷大,这样避免被最小割取到,两个相邻的格子之间建边,容
188



被折叠的 条评论
为什么被折叠?



