洛谷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;
}
QT绘制饼图+柱状图+折线图 使用qt绘制,折线图,饼图,柱状图,多柱状图 阅读详情

相关推荐

三极管NPN与PNP的工作原理及快速识别技巧

本文深入浅出地解析了三极管NPN与PNP的核心工作原理。通过“水龙头”比喻,阐明其以小电流控制大电流的放大与开关本质。文章重点对比了NPN与PNP在电流方向、电位关系和控制逻辑上的根本区别,并提供了快速识别技巧与实用的选型、应用指南,帮助电子爱好者与工程师快速掌握这两种基础元件的关键知识。

neovim7hacker的博客 452

洛谷P2774:方格取数问题

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

Deep_Kevin的娱乐空间 1238

攻防世界:Crypto习题之easy_RSA

在非对称加密算法中,单向函数被广泛应用,用于确保从公钥加密后的密文无法轻易推导出私钥,从而保证数据的安全性。而其中最著名的算法便是 RSA 加密算法。首先设φm:=∣1≤k≤mgcdkm1∣为欧拉函数(Euler’sche Phi-function)。pqn:=pqpqφnnpqpqφnp−1q−1e∈12...φn−1gcdφne1ended≡1φn假设我们现在有明文x以及公钥en。

qq_52789488的博客 1570

P2774 方格取数问题

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

weixin_30602505的博客 89

网络工程系统CAD图:从设计到落地的关键技能与实战指南

网络工程并不只是配置路由器和交换机,真正的核心在于将设计方案转化为可施工的物理图纸。网络工程系统CAD图正是连接逻辑设计与物理世界的桥梁,它涵盖综合布线、信息点布置、桥架路由、弱电间规划等关键内容。理解并掌握这套图纸体系,是网络工程师从基础设备调试走向项目主导者、弱电总工乃至网络架构师的重要分水岭。在园区网、数据中心、智能楼宇等真实场景中,一套规范的系统CAD图直接决定了施工质量、验收效率与后期运维的可靠性。本文从基础概念出发,拆解图纸的组成层次、绘制流程和软件工作流,并结合学习路线与就业方向,帮助初学者建

weixin_33860553的博客 390

cadence allegro 17.x 降版本到16.6的转换工具

Cadence17.x版本降低到16.6版本转换工具 下载链接:Cadence17.x版本降低到16.6版本转换工具   使用方法: 软件使用比较简单,在「第一个路径输入栏」浏览指向17.x的设计文件,也就是需要降版本的17.4或者17.2的文件,然后在「第二个路径输入栏」里浏览指向转换后的文件保存路径,然后点击「转换」按钮即可。 ...

ltqdxl的博客 1万+

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

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

Maxwei_wzj的OI世界 849

机械臂TCP标定实战:从四点法到六点法的精度跃迁

本文详细解析机械臂TCP标定技术,从基础的四点法到高精度的六点法实现精度跃迁。通过工具坐标系与基坐标系的转换原理,结合实战案例展示六点法如何将装配合格率提升至99.5%,并分享环境控制、操作技巧等提升标定精度的关键要素。

weixin_29038345的博客 894

洛谷 P2774 方格取数问题

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

weixin_34406086的博客 120

Plant Simulation与ABB机器人虚实结合

Plant Simulation与ABB机器人虚实结合

santayana的专栏 1869

YOLOv10改进 | 主干篇 | 引入FasterNet:Run, Don‘t Walk,追求更快的神经网络

本文引入了 FasterNet 作为 YOLOv10 的主干网络。通过 PConv 算子,我们有效降低了模型的计算冗余。对于追求极致推理速度的场景(如树莓派、Jetson Nano),该改进方案极具价值。建议在训练时配合混合精度训练 (AMP)进一步加速。

weixin_51988935的博客 604

[洛谷P2774] 方格取数问题

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

weixin_30776273的博客 207

OpenClaw 2026.3.13 踩坑实录:飞书HTTP协议降级Bug与多版本回归问题汇总

摘要:OpenClaw v2026.3.13存在多个严重回归问题,包括飞书API调用协议意外降级为HTTP导致连接失败(#46100)、本地Gateway诊断矛盾(#45504)及设备配对CLI命令失效等。该版本发布流程本身也存在异常,被迫以v2026.3.13-1标签重新发布。建议飞书用户回退至v2026.3.8稳定版,其他用户谨慎升级。本文详细记录了各Bug现象、影响范围及临时解决方案,并梳理了飞书通道的"多版本回归史",指出其根源在于架构变迁和测试覆盖不足。最后提供了包含配置备份、

Maynor的博客 869

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

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

a free man 284

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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

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

Dawn_LLLLLLL 441

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

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

Karshilov的博客 368

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

洛谷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、付费专栏及课程。

余额充值