HDU 3657 网络流

SQL Server数据库备份与恢复 在 SQL Server 中,数据库备份与恢复是保障数据安全的核心操作。 阅读详情
/***************************************************************************************
    去年网络赛的一道题,现在看来也不是很难。做个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;
}

2026星宸科技数字IC设计笔试带答案 摘要:本文包含四个计算机科学领域的编程与逻辑设计题目解析。第一部分通过C语言程序补充水仙花数判断代码,考查循环结构和函数设计;第二部分分析Verilog代码的D触发器电路,讨论时序约束与时钟频率影响;第三部分详细讲解静态时序分析中的建立/保持时间计算与违例判断;第四部分计算机体系结构题目涉及CPI、MIPS计算和性能加速比分析。最后还包含一个逻辑代数化简的示例,展示基本的布尔代数简化技巧。这些题目全面覆盖了编程基础、数字电路设计、时序分析和计算机性能评估等核心知识点。(149字) 阅读详情

相关推荐

R语言maftools包实战:5分钟搞定TCGA癌症突变数据可视化(附完整代码)

本文详细介绍了如何使用R语言的maftools包快速解析和可视化TCGA癌症突变数据。通过实战演示,从环境搭建、数据导入到核心可视化(如瀑布图、棒棒糖图)和深度统计分析(如生存分析、突变特征),帮助生物信息学研究者高效完成癌症基因组学分析,大幅提升从原始MAF数据到发表级图表的效率。

weixin_29054399的博客 188

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&lt;iostream&gt; 2 #include&lt;cstdio&...

weixin_33834628的博客 174

Qt思岚激光雷达

Qt关于思岚激光雷达研究示例,本示例采用qt界面开发,可以串口也可以tcp进行设备连接。接收数据进行相关的数据进行绘图, 这种雷达可以用于大屏触摸场景,会场互动触摸场景开发。 #ifndef MAINWIDGET_H #define MAINWIDGET_H #include <QTimer> #include <QWidget> #include "lidarmgr.h" namespace Ui { class MainWidget; } class MainWidget.

cqltbe131421的博客 1598

hdu 3657 最小割(牛逼!!!!)总算理解了

<strong></strong>转载:http://blog.youkuaiyun.com/me4546/article/details/6662959 加颜色的太棒了!!! 在网上看到的一句话恍然大悟啊,建立一个最小割模型之后,假设x点与源点是连着的,说明你是把x点给取到手了,不连,说明你是把x点去除,之前一直不太明白边的容量是怎么来确定的,现在知道了,方格取数是相邻两...

weixin_30349597的博客 180

ANC降噪学习

概述 ANC,英文名称:Active Noise Control,主动降噪。其原理是降噪系统电路产生降噪MIC接收的外界环境噪音相等的反相信号,将噪声抵消。核心算法 ANC降噪实现核心算法为:FxLMS(最小均方差算法)。最小均方差算法以均方误差为代价函数,并使误差降到最小的算法。 具体算法推导这里不做具体介绍,这里直接列出表达式: ...

王小壮的博客 2万+

VMD-CNN-BiLSTM-Attention预测模型 —— 数学模型介绍&完整实例代码

想解决电力负荷预测中的非线性、非平稳难题?这篇博客介绍了一种创新混合模型,结合变分模态分解(VMD)和CNN-BiLSTM-Attention深度学习架构,实现超高精度预测! ✨ 核心亮点: ✅ VMD分解:有效分离复杂负荷信号,提取关键频率特征 ✅ 混合深度学习:CNN捕捉局部模式 + BiLSTM学习长时序依赖 + 注意力机制聚焦关键时段 ✅ 端到端优化:从数据预处理(滑动窗口、归一化)到模型训练(MSE损失+Adam优化),完整流程公开! ✅ 工业级评估:提供MSE、MAE、MAPE、R²多指标验证

qq_42924330的博客 1653

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(

智浩的博客 277

Decoder如何工作、Transformer如何训练、以及exposure bias问题

1、结合图文描述Decoder中各个模块是什么,以及是如何工作的。2、transformer是如何训练的。3、exposure bias问题造成的原因及解决方法

m0_59113542的博客 3345

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

KeyboardPianist的博客 573

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

YouthBelief的博客 4264

项目经理面试 5 大高频题 + 实战回答模板,帮你稳拿 offer

项目经理面试5大高频问题及应答技巧 摘要:本文总结了项目经理岗位常见的5个面试问题及回答策略,帮助求职者更有针对性地准备面试。核心问题包括:1)描述负责过的典型项目;2)常用项目管理工具;3)项目遇到的挑战及解决方案;4)风险管理方法;5)项目成功标准。每个问题都从面试官考察重点、回答技巧、实战案例三个维度进行分析,强调要用STAR法则(情境-任务-行动-结果)结构化表达,突出解决问题的能力而非简单罗列经历。特别提醒要量化项目成果(如提前2周上线、节省8%预算等),并注意展示商业思维和团队协作能力。

逸尘谈PM 2106

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 ...

青烟绕指柔的博客 435

ArcGIS Pro 制作这种地图海报

ArcMap 版本与 ArcGIS Pro 版本的制图功能相差太多,无论从美观上还是制图效率都远远优于 ArcMap,用了一段时间的 ArcGIS Pro ,真心推荐有条件的大家赶紧试一试!一个软件也能搞定一张不错的海报哦!----吐槽:好的设计真的是门花时间的活,这个教程大概花了我7小时左右,我都忘了我自己教程中截图多少张了!(可能是我速度太慢了)测试数据:阿里云盘分享-----北极海冰数据.https://www.aliyundrive.com/s/SUhsnqfkmXh。

J_Giser的博客 1430

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的方格里,每个数...

dechi5213的博客 575

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

GentleH's 622

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.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

u010270082的专栏 431

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

深入理解最小割的意义

在做网络流题目的时候,我们时常因为无法正确建图而遗憾错过本应该的AC。 今天通过一些题目,我好好记录一下自己对最大流、最小割的学习感受。 Hdu 1565,题意: 给你一个矩阵,矩阵上每个点上都有一个数字,现在要你在矩阵中取一些数字,使得取得的数字和最大! 规则:相邻的格子不能同时取,即取了一个以后,它四周的数字便不能再取了。 分析:(题目实际就是求一个无向图的最大点权独立集) 这种方...

weixin_30905981的博客 380

【HDU】3657 Game 最小割

传送门:【HDU】3657 Game 题目分析:

poursoul 866

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

ME4546的专栏 2663

hdu 1569 and hdu 3657 最小割

给你一个m*n的格子的棋盘,每个格子里面有一个非负数。 从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取数所在的2个格子不能相邻,并且取出的数的和最大。

老李2009 804

HDU3657Game(最大流)

这几天敲了几道最大流的问题,发现网络流真是模板算法啊。。。。 敲来敲去敲了几遍,基本每遍都敲得让人灰心,但同时也感受到了网络流的强大所在,这是我做网络流的第一题,,本以为看了一遍小白书的代码差不多理解就可以A掉一题的,没想到打击不是一点点的少啊。。。。。 首先小白书将的邻接矩阵存边,这里必须用邻接表,而本以为随便改改就好的,没想到那个记录路径却让人头疼得要命,无赖之下看了题解,看到了一个名为S...

weixin_30701521的博客 90

hdu3657 奇偶方格取数

从n*m的方格中取数 取走一个数 你的总分数里就加上这个数 若取走一个数之后 出现了两个相邻的格子 那么你的总分数里就要减去2*(x&y) x和y分别为这两个格子中原本放的数 同时规定了k个数必须要取走 方格取数的题做法:横纵坐标和为奇数的点为X集合放在左边  为偶数的点为Y集合放在右边  源点与集合X里的点连边 权值为点的权值    集合Y里的点与汇点连边 权值为点的权值 然后X集

Frozensmile的博客 424

网络流题集【转】

博客原文:http://blog.youkuaiyun.com/shahdza/article/details/7779537 最近搞网络流。。觉得这篇博客总结的题集感觉很有用,mark转载下来 【HDU】 1532 Drainage Ditches(入门)    [最大流] 3549 Flow Problem(入门)    [最大流] 3572 Task Schedule(基础)    [最大流

HJY 618

hdu3657 Game(最大点权独立集||最小割)

http://acm.hdu.edu.cn/showproblem.php?pid=3657 题意:方格取数,求取出的数和最大。取相邻的数要付出权值相与的代价,同时还要指定一些格子必须要取到。 思路:整体思路和hdu1565一样,看我的理解。保证某个点必须取那就连一条割不动的边,我们知道割不动的不会被算在最小花费,也就被算在最后的最大点权独立集。至于中间相邻格子的代价,把原先的割不

Iguodala的博客 472

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

Samaritan_infi的博客 286

HDU 3657 Game 最小割

题目:http://acm.hdu.edu.cn/showproblem.php?pid=3657题意:给定一个n*m的方格,每个格子里有一个数,现在从里面去一些数字,使这些数字的和最大,其中若有两个格子相邻,则要减去2 * (v & u) ,另外规定有一些格子必须取思路:首先对格子二分建图,类似于最大权独立集,必须取的格子和源汇点连边时容量为无穷大,这样避免被最小割取到,两个相邻的格子之间建边,容

弱智就要多努力 445
上一篇: Neo
下一篇: HDU 3656 DLX重复覆盖
codeforces_sphinx
博客等级 码龄15年 32粉丝 75原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值