洛谷P2774方格取数(网络流24题)

网络流经典第二十四题(题目+数据+标程) 网络流经典二十四题之第二十四题----骑士共存问题 内含pdf题目, 亲测代码, data, 文字版题解 立即下载

我们对棋盘进行黑白染色((横坐标+纵坐标)%2==1的点设为黑点),可以发现,若取一个黑格的点,受到影响的就是周围的白点。于是我们可以建一个二分图。问题是,应该如何建图。如果将每个点考察他能与哪些点相连,显然太复杂了,因此我们不如将每个点与他不能相连的点连接在一起。
然后可以发现这是一个最小割的套路题,假设所有的点都取,然后去掉最小割,就是答案了。
建模:S->黑点,容量为点权
白点->T,容量为点权
每一个黑点->取该黑点会受到影响的白点,容量为inf,保证你在最小割的时候不会去割中间这些边。

另一种不错的解释:
相邻的数字只能选一个,联想到二分图,相邻的点分别放在x、y端,他们之间连一条边
为什么他们之间连一条边呢,因为相邻数字的关系有且仅有相邻为影响,我们需要把影响转化到模型上,
不相邻的点建边虽然思考起来更直观,但是边数太多了,反而更难理清思路
要使边有意义且合法,我们需要构造起始点和终点,因为x的每个点地位相同,那么都和s点相连,同理y和t相连
显然对于构造出来的这个图,我们要尝试把题意转化进去,即答案需要的是一种什么图。
x和y相连的两个点只能要一个,这是题意,那么结果图中不能有s-u-v-t完整的4条弧构成的“链”,
断链的方法显然为最小割,最小割最大流是很重要的定理。
模拟一下最大流的过程,举几个小例子就能明白我们割掉的是小的,留下来的是大的和小的的差

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
struct edge {
    int to, cap, rev;
};
vector<edge>G[10010];
int level[10011], iter[10011];
int n, m;
void addedge(int from, int to, int cap)
{
    edge e;
    e.to = to; e.cap = cap; e.rev = G[to].size();
    G[from].push_back(e);
    e.to = from; e.cap = 0; e.rev = G[from].size() - 1;//一定要小心反向边的cap为0!!!
    G[to].push_back(e);
}
void bfs(int s)
{
    memset(level, -1, sizeof(level));//每次bfs的时候构图都不同,要memset
    queue<int>que;
    level[s] = 0;
    que.push(s);
    while (!que.empty()) {
        int t = que.front(); que.pop();
        for (int i = 0; i < G[t].size(); i++) {
            edge e = G[t][i];
            if (e.cap&&level[e.to] < 0) {
                level[e.to] = level[t] + 1;
                que.push(e.to);
            }
        }
    }
}
int dfs(int v, int t, int f)
{
    if (v == t)
        return f;
    for (int &i = iter[v]; i < G[v].size(); i++) {//因为每次dfs的时候如果找到解就return了,所以有必要记录上次这个点搜到哪了
        edge &e = G[v][i];
        if (e.cap&&level[e.to] > level[v]) {
            int d = dfs(e.to, t, min(f, e.cap));
            if (d) {
                e.cap -= d;
                G[e.to][e.rev].cap += d;
                return d;
            }
        }
    }
    return 0;
}
int maxflow(int s, int t)
{
    int flow = 0;
    for (;;) {
        bfs(s);
        if (level[t] < 0)//说明此时已经不存在没有搜过的路了
            return flow;
        memset(iter, 0, sizeof(iter));
        int f;
        while (f = dfs(s, t, 1 << 30))//要搜完当期状况下的所有可能
            flow += f;
    }
}
int main()
{
    int i, j, num[101][101], total = 0;
    cin >> m >> n;
    for(i=1;i<=m;i++)
        for (j = 1; j <= n; j++) {
            scanf("%d", &num[i][j]);
            total += num[i][j];
        }
    int move[4][2] = { 0,-1,-1,0,0,1,1,0 };
    for(i=1;i<=m;i++)
        for (j = 1; j <= n; j++) {
            if (i % 2 == j % 2) {
                addedge(0, (i - 1)*n + j, num[i][j]);
                for (int k = 0; k < 4; k++) {
                    if (i + move[k][0] > 0 && i + move[k][0] <= m && j + move[k][1] > 0 && j + move[k][1] <= n)
                        addedge((i - 1)*n + j, (i + move[k][0] - 1)*n + j + move[k][1], 1 << 30);
                }
            }
            else {
                addedge((i - 1)*n + j, 10005, num[i][j]);
            }
        }
    int ans =total- maxflow(0, 10005);
    cout << ans << endl;

    return 0;
}
Unity Sprite Editor切片功能详解:如何快速将一张大图拆分成多个小图(附常见问题解决) 本文详细解析了Unity Sprite Editor的切片功能,指导开发者如何高效地将一张大图拆分为多个独立小图。文章涵盖了自动与手动切片操作步骤、轴心点设置、子精灵命名管理等核心技巧,并针对切片错位、性能优化等常见问题提供了实用解决方案,帮助提升2D游戏资源处理效率。 阅读详情

相关推荐

海外最新AI营销AI销售书籍推荐AI营销培训讲师AI销售培训讲师人工智能营销培训师人工智能销售培训师AI赋能营销培训AI赋能销售培训企业AI营销内训企业AI销售内训AI营销课程讲师AI销售课程讲师

专栏|AI营销与AI销售实战 · 第46期在这个人类与算法共舞的时代,销售,已经不是你我熟悉的那个“打电话、见客户、做PPT”的老行当了。你还以为销售是“打感情牌”?错了,情感要继续,但方式已经升级。你还以为AI只是“写写文案”?错了,文案只是皮毛,真正的杀器,是思维方式的重构,是认知地图的重绘。首先,我们需要明确一个事实:AI并不会消灭销售这个职业,但它必然会重新定义销售的本质。在销售领域,真正的制胜之道不是简单地采用AI工具,而是的能力。

Akibfrycc的博客 1100

洛谷P2774:方格取数问题

题目描述      在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数。现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大。试设计一个满足要求的取数算法。对于给定的方格棋盘,按照取数要求编程找出总和最大的数。题解      看到这道题中的“最大”两个字,很多人都会想到用最大费用最大流的方法来做:每个点先拆点,然后每个点向下一个可以取的店连一条INF的边,然后再用入点到...

Deep_Kevin的娱乐空间 1238

4G LTE 与 5G 无线网络规划对比:从 BBU/RRU 到 CU/DU/AAU 的架构演进解析

本文深度解析4G LTE与5G无线网络架构的演进差异,从BBU/RRU分立式架构到CU/DU/AAU三级重构,揭示移动通信代际跃迁的技术本质。重点对比了网络规划中的覆盖能力、容量规划、传输网络等九大维度,为通信工程师提供实用的技术对照手册,助力5G网络高效部署。

weixin_32821533的博客 287

网络流24题解题总结(更新中)

目录 目录 前言 最大流问题 飞行员配对方案问题 最小路径覆盖问题 魔术球问题 圆桌问题 最长不下降子序列问题 试题库问题 星际转移问题 最小割问题 太空飞行计划问题 方格取数问题 费用流问题 餐巾计划问题 航空路线问题 软件补丁问题 数字梯形问题 运输问题 分配问题 负载平衡问题 深海机器人问题 最长k可重区间集问题 最长k可重线段集问题 不可做问题 机器人路径规划问题

Maxwei_wzj的OI世界 849

LobeHub开源AI应用平台:从部署到定制的全栈实践指南

在现代AI应用开发领域,大语言模型(LLM)的集成与部署是核心技术挑战之一。其原理在于通过API或本地化部署,将预训练模型的强大能力封装为可调用的服务。这项技术的核心价值在于极大地降低了AI应用的开发门槛,使开发者能够快速构建智能对话、内容生成等场景的应用。随着模型即服务(MaaS)模式的普及,一个关键痛点是如何高效地管理多模型、设计友好的用户界面并实现功能扩展。这正是开源项目LobeHub所聚焦的领域,它通过提供可插拔的架构和配置驱动的低代码理念,解决了AI能力落地的“最后一公里”问题。本文将结合Dock

weixin_27210125的博客 751

【用unity实现100个游戏之1】制作类元气骑士、挺进地牢——俯视角射击游戏多种射击效果(二)(附源码)

这篇文章我们将继续实现曲线射击与两种不需要实体子弹的射击方式 源码在文章末尾。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 5060

P2774 方格取数问题

题目背景 none! 题目描述 在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数。现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大。试设计一个满足要求的取数算法。对于给定的方格棋盘,按照取数要求编程找出总和最大的数。 输入输出格式 输入格式: 第 1 行有 2 个正整数 m 和 n,分别表示棋盘的行数和列数。接下来的 m 行,每行有 n 个正整...

weixin_30602505的博客 89

【声纳技术】声呐时间反转镜技术:从被动聚焦到主动空间复用

时间反转镜技术以其独特的物理机制,为水声通信与声呐探测提供了一条绕过传统自适应均衡器的新路径。被动时间反转利用接收端的空间分集实现脉冲压缩,结构简洁、计算高效;主动时间反转则通过发射端预编码,将多径能量引导至目标位置,为多用户下行链路的空间复用奠定了物理基础。从Kuperman等人在海洋中首次验证声学时间反转镜,到TR-MIMO声呐的湖试验证,再到VTRM-CRK多用户通信系统的海试成功,该技术已从理论概念逐步走向工程实用。

u012133341的博客 55

洛谷 P2774 方格取数问题

题目背景 none! 题目描述 在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数。现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大。试设计一个满足要求的取数算法。对于给定的方格棋盘,按照取数要求编程找出总和最大的数。 输入输出格式 输入格式: 第 1 行有 2 个正整数 m 和 n,分别表示棋盘的行数和列数。接下来的...

weixin_34406086的博客 120

环境配置与基础教程:2026大厂标准:使用 DVC (Data Version Control) 实现 YOLO 数据集版本控制全链路管理

本文介绍了使用DVC 3.0对YOLO数据集进行全链路版本控制的方法。主要内容包括: DVC 3.0的核心增强:内容块级缓存去重、并行云传输、AI智能体元数据跟踪等新特性,可显著提升YOLO数据集管理效率。 环境配置:详细说明DVC 3.0的安装步骤、项目初始化方法以及远程存储配置方案(支持S3、GCS、Azure等多种存储后端)。 目录结构规范:提供符合大厂MLOps标准的项目目录结构设计。 实战操作: 原始数据版本化 多格式标注数据版本控制 版本切换方法 优势说明:DVC通过哈希指针机制管理大型数据集,

ZXSXJ的博客 148

串行RapidIO(Serial RapidIO,SRIO):协议介绍

目录一、RapidIO背景介绍二、RapidIO协议概述2.1 包与控制符号2.2 包格式2.4 消息传递2.5 全局共享存储器2.6 流量控制2.7 串行物理层三、I/O逻辑操作与包格式四、维护操作与包格式五、消息操作与包格式六、总结 本文是基于Xilinx平台SRIO介绍(一)RapidIO协议介绍的内容作读书笔记。 一、RapidIO背景介绍 RapidIO采用三层分级体系结构,包括逻辑层、传输层和物理层该分级结的如下图所示: ● 逻辑层:位于最高层,定义全部协议和包的格式,它们为端点器件发起和完

Starry__的博客 1万+

[洛谷P2774] 方格取数问题

题意 在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数。现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大。 想法 我们将问题转化为:一开始所有格子都选,之后去掉价值和最少的一些格子使剩下的格子合法。 将方格黑白染色,白格子连向S,黑格子连向T,边权为这个格子的值(也就是说将格子转移到边上)。 相邻的黑白格子间连INF的边。(这样每条从S到T的路径都为 S-&gt...

weixin_30776273的博客 207

扣子Coze工作流教程:采集公众号爆文,一键仿写自动发布

通过本教程,你学会了如何利用扣子(Coze)平台构建一个完整的公众号文章自动处理工作流。这个系统不仅能够大幅提升内容产出效率,还能通过AI二创保持内容新鲜度和原创性。最佳实践建议:初次使用时,建议先保存为草稿而不是直接发布,以便人工审核;从简单的工作流开始,逐步增加复杂度;定期检查工作流运行日志,优化节点配置。自动化内容创作是新媒体运营的未来趋势,掌握这项技能将使你在数字内容领域占据显著优势。

互联网架构师笔记 1238

【网络流24题-9】洛谷P2774 方格取数问题

二分图最大权独立集/最小割

a free man 284

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

[网络流24题]洛谷 P2774 方格取数问题(网络流)

传送门 题目描述 在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数。现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大。试设计一个满足要求的取数算法。对于给定的方格棋盘,按照取数要求编程找出总和最大的数。 输入输出格式 输入格式: 第 1 行有 2 个正整数 m 和 n,分别表示棋盘的行数和列数。接下来的 m 行,每行有 n 个正整数,表示棋盘...

Dawn_LLLLLLL 441

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

洛谷P2774 & bzoj1475 方格取数 —— 网络流24题

所求为最大点权独立集,考虑转化最小点权覆盖集,再转化为最小割问题求解,跑最大流-_- 其实就是染个色再跑个最大流,建图见代码: #include #include #include #include #include #include #include #include using namespace std; int Mat[40][40]; bool M[40][40];

Karshilov的博客 368

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

洛谷P2774 :方格取数问题( 网络流24题 奇偶建图+最小割)

https://www.luogu.org/problemnew/show/P2774 题目描述 在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数。现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大。试设计一个满足要求的取数算法。对于给定的方格棋盘,按照取数要求编程找出总和最大的数。 输入输出格式 输入格式: 第 1 行有 2 个正整数 m 和 n,...

406

【网络流24题-洛谷-P2774】方格取数问题(二分图点权最大独立集、网络最小割)

题目背景 none! 题目描述 在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数。现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大。试设计一个满足要求的取数算法。对于给定的方格棋盘,按照取数要求编程找出总和最大的数。 输入格式 第 1 行有 2 个正整数 m 和 n,分别表示棋盘的行数和列数。接下来的 m 行,每行有 n 个正整数,表示棋盘方格中的数。 ...

__似水流年__的博客 377

[网络流24题]方格取数问题

题目:洛谷P2774、codevs1907。 题目大意:在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数。现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大。试设计一个满足要求的取数算法。对于给定的方格棋盘,按照取数要求编程找出总和最大的数。 解题思路:本题关键在建模。 把棋盘黑白染色(像国际象棋棋盘那样)。 对于黑色的,连接源点,容量为格子中的数...

390

洛谷网络流24题

一、P2756 飞行员配对方案问题 二、 P2762 太空飞行计划问题 三、P2764 最小路径覆盖问题 四、P2765魔术球问题 五、P3254圆桌问题 六、P2766最长不下降子序列问题 七、P2763试题库问题 八、P2774方格取数问题 九、P1251餐巾计划问题 十、P2770航空路线问题 十一、P4011孤岛营救问题(emmm,没用到网络流,也...

PCCCCC的博客 997

洛谷——网络流24题

P2756 飞行员配对方案问题 P2762 太空飞行计划问题 P4014 分配问题 P2774 方格取数问题 P4009 汽车加油行驶问题 P4015 运输问题 P3254 圆桌问题 P2763 试题库问题 P2765 魔术球问题 P1251 餐巾计划问题 P3355 骑士共存问题 P4013 数字梯形问题 P2770 航空路线问题 P3356 火星探险问题 P2761 软件补丁问题 P4011 孤岛营救问题 P4016 负载平衡问题 P4012 深海机器人问题 P2764 最小路径覆盖问题 P2775.

我们都有光明的未来 908

【洛谷2774】 方格取数问题(网络流24题,最小割)

前言 为什么他们能够切的那么快啊。 Solution 虽然我不会怎么区分最大流和最小费用最大流,但是最大流可以看成最小割,这样子就好区分一些。 考虑这个东西相当于是二分图求一个最小割,直接Dinic套上去就好了。 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<ma...

araw94333的博客 180

网络流(17/24)

题目均来自洛谷。 S为源点,T为汇点。 P2756 飞行员配对方案问题 二分图板子,跑完后,看看match的值就好了。 P2763 试题库问题 把种类到题目连起来流量为1, 题目到T流量为1, S到种类流量为需要的题数。 跑最大流后看种类结点的出边的capcapcap有没有被用掉就好(注意有到S的反向边)。 P4014 分配问题 人到工作流量为1费用为Ci,jC_{i,j}Ci,j​,S到人流量为...

Rshs 305

洛谷2774:[网络流24题]方格取数问题——题解

https://www.luogu.org/problemnew/show/P2774#sub 在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数。现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大。 试设计一个满足要求的取数算法。对于给定的方格棋盘,按照取数要求编程找出总和最大的数。 最小割问题(然而我最开始想的是带权二分图……没准他们是一样的……?)...

weixin_34245169的博客 123
上一篇: 最小路径覆盖(模板)
下一篇: (模板)二分图匹配匈牙利算法
HumveeA6
博客等级 码龄17年 12粉丝 175原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值