HDU 3338 Kakuro Extension 网络流

生成式引擎优化(GEO)标准化操作流程:构建高效AI生成系统的全链路指南 GEO是针对生成式AI的内容优化策略,通过提升内容在AI生成答案中的引用优先级实现品牌传播。相比传统SEO,GEO使内容直接嵌入AI答案,无需用户点击链接。核心流程包括:1)逆向拆解AI问答场景,结构化知识资产;2)生产权威内容(白皮书、专利数据)和算法适配内容(PCOE模板);3)技术实现(数据投喂、模型微调);4)331渠道分发策略;5)效果监控与动态防御。需注意采用结构化数据标记、主动提交训练数据,并避免简单复制SEO策略。2025版强调内容权威性和语义优化,通过AI原生内容工程实现高效曝光。 阅读详情
题意:给一个 N∗N 的矩阵,白色的格子要求填数(范围1~9),要求:如果有出现如028\XXX(称为上边的情况),则表示,我这个格子下面所有的白格子中的数字之和要等于这个。如果有出现XXX\028(称为左边的情况),则表示,我这个格子右边所有的白格子中的数字之和要等于这个。
思路:神奇的网络流。白格子需要拆为入点和出点,来控制经过白格子的流量。源点与每个左边的情况连一条流量为左边情况数字的边,每个左边的情况与他右边的白格子的入点连一条流量为 INF 边。每个上边的点与汇点连一条流量为上边数字的边,他下边的所有白格子出点与上边的情况,连一条流量为 INF 的边。每个白格子的入点和出点连一条流量为8的边。(因为流量可以为0,所以所有的流量都减去1,用0~8来表示1~9,注意的是,上边情况和左边情况的数值都要减去它所连的边的数量,最后输出结果时统一+1)
坑点:细节很多,调试起来有点烦。

http://acm.hdu.edu.cn/showproblem.php?pid=3338

/*********************************************
    Problem : HDU 3338
    Author  : NMfloat
    InkTime (c) NM . All Rights Reserved .
********************************************/

#include <map>
#include <set>
#include <queue>
#include <cmath>
#include <ctime>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>

#define rep(i,a,b)  for(int i = a ; i <= b ; i ++)
#define rrep(i,a,b) for(int i = b ; i >= a ; i --)
#define repE(p,u) for(Edge * p = G[u].first ; p ; p = p -> next)
#define cls(a,x)   memset(a,x,sizeof(a))
#define eps 1e-8

using namespace std;

const int MOD = 1e9+7;

typedef long long LL;

int T,n,m,k;

const int MAXN = 100010;  
const int MAXE = 400010;  
const int INF = 0x3f3f3f3f;  

struct Edge{  
    int to,next,cap,flow;  
}edge[MAXE];  

int tol;  
int head[MAXN];  
int gap[MAXN],dep[MAXN],pre[MAXN],cur[MAXN];  

void init(){  
    tol = 0;  
    memset(head,-1,sizeof(head));  
}  

void addedge(int u,int v,int w,int rw = 0){  
    //printf("%d->%d\t",u,v);
    edge[tol].to = v;edge[tol].cap = w;edge[tol].next = head[u];  
    edge[tol].flow = 0;head[u] = tol ++;  
    edge[tol].to = u;edge[tol].cap = rw;edge[tol].next = head[v];  
    edge[tol].flow = 0;head[v] = tol ++;  
}  

int sap(int start,int end,int N){  
    memset(gap,0,sizeof(gap));  
    memset(dep,0,sizeof(dep));  
    memcpy(cur,head,sizeof(head));  
    int u = start;  
    pre[u] = -1;  
    gap[0] = N;  
    int ans = 0;  
    while(dep[start] < N){  
        if(u == end){  
            int Min = INF;  
            for(int i= pre[u];i!=-1;i=pre[edge[i^1].to]){  
                if(Min > edge[i].cap - edge[i].flow)  
                    Min = edge[i].cap - edge[i].flow;  
            }  
            for(int i= pre[u];i!=-1;i=pre[edge[i^1].to]){  
                edge[i].flow += Min;  
                edge[i^1].flow -= Min;  
            }  
            u = start;  
            ans += Min;  
            continue;  
        }  
        bool flag = false;  
        int v;  
        for(int i=cur[u];i != -1;i = edge[i].next){  
            v = edge[i].to;  
            if(edge[i].cap - edge[i].flow && dep[v] + 1 == dep[u]){  
                flag = true;  
                cur[u] = pre[v] = i;  
                break;  
            }  
        }  
        if(flag){  
            u = v;  
            continue;  
        }  
        int Min = N;  
        for(int i = head[u];i != -1;i=edge[i].next){  
            if(edge[i].cap-edge[i].flow && dep[edge[i].to] < Min){  
                Min = dep[edge[i].to];  
                cur[u] = i;  
            }  
        }  
        gap[dep[u]]--;  
        if(!gap[dep[u]]) return ans;  
        dep[u] = Min + 1;  
        gap[dep[u]] ++;  
        if(u != start) u = edge[pre[u]^1].to;  
    }  
    return ans;  
}  

int Map[105][105][2];//0代表左,1代表上。
int Mat[105][105][2];//0是入点,1是出点。左0,上1。
int Ans[105][105];
int idx ;

void outMap() {
    rep(i,1,n) { rep(j,1,m) printf("%d %d\t",Map[i][j][0],Map[i][j][1]); puts("");}
}

void outMat() {
    rep(i,1,n) { rep(j,1,m) printf("%d %d\t",Mat[i][j][0],Mat[i][j][1]); puts("");}
}

int get_num(char s1,char s2,char s3,int flag,int x,int y) {
    flag = 1 - flag;
    if(s1 == 'X') Map[x][y][flag] = -1;
    else if(s1 == '.') { Map[x][y][flag] = 0;Mat[x][y][flag] = idx ++;}
    else { Map[x][y][flag] = (s1-'0')*100+(s2-'0')*10+(s3-'0');Mat[x][y][flag] = idx++;}
}

void input() {
    char tmp_c[10];
    idx = 1;
    cls(Mat,0);
    rep(i,1,n) rep(j,1,m) {
        scanf("%s",tmp_c);
        get_num(tmp_c[0],tmp_c[1],tmp_c[2],0,i,j);
        get_num(tmp_c[4],tmp_c[5],tmp_c[6],1,i,j);
    }
}

bool dvis[MAXN];

void dfs(int u) {
    int v;
    for(int i = head[u] ; i != -1 ; i = edge[i].next) {
        v = edge[i].to;
        if(!dvis[v]) {
            dvis[v] = 1;
            printf("%d->%d\t",u,v);
            dfs(v);
        }
    }
}

void solve() {
    //建边
    //outMap();puts("");
    //outMat();puts("");
    int start = 0 , end = idx ,totnum = idx + 1;
    int tmp;
    rep(i,1,n) rep(j,1,m) {
        if(Map[i][j][0] > 0) { //左
            tmp = 0;
            rep(k,j+1,m) {
                if(Map[i][k][0] == 0) {
                    tmp ++;
                    //printf("%d %d\n",Mat[i][j][0],Mat[i][k][0]);
                    addedge(Mat[i][j][0],Mat[i][k][0],INF);
                }
                else break;
            }
            addedge(start,Mat[i][j][0],Map[i][j][0]-tmp);

        }
        if(Map[i][j][1] > 0) { //上
            tmp = 0;
            rep(k,i+1,n) {
                if(Map[k][j][1] == 0) {
                    tmp ++;
                    addedge(Mat[k][j][1],Mat[i][j][1],INF);
                }
                else break;
            } 
            addedge(Mat[i][j][1],end,Map[i][j][1]-tmp);
        }
        if(Map[i][j][0] == 0) { //...
            addedge(Mat[i][j][0],Mat[i][j][1],8);
        }
    }

    sap(start,end,totnum);
    // cls(dvis,0);
    // dvis[0] = 1;
    // dfs(0);

    cls(Ans,-1);
    rep(i,1,n) rep(j,1,m) {
        if(Map[i][j][0] == 0) {
            //printf("%d->%d ",Mat[i][j][0],edge[head[Mat[i][j][0]]].to);
            Ans[i][j] = edge[head[Mat[i][j][0]]].flow;
        }
    }
    rep(i,1,n) rep(j,1,m) {
            if(Ans[i][j] == -1) printf("_");
            else printf("%d",Ans[i][j]+1);
            if(j == m) puts("");
            else printf(" ");
        }
}

int main(void) {
    //freopen("a.in","r",stdin);
    //scanf("%d",&T);
    //while(T--) {
    while(~scanf("%d %d",&n,&m)) {
        init();
        input();
        solve();
    }
    return 0;
}
Zemax 中的 LED 阵列模型 这些光线是所有光线的子集,用于布局可视化,而不是详细分析。X 和 Y 散度(αx 和 αy)以度为单位,以不同的方式设置为 6 度和 12 度。每个 LED 都以朗伯模式(广角分布)发光,尽管有些 LED 具有内置光学元件,用于更窄或更聚焦的光束。,具体取决于这些类别中使用的半导体材料。LED 阵列由多个发光二极管 (LED) 组成,这些二极管以特定模式或配置排列,以实现均匀照明、更高强度或特定照明特性。如果数据的存在更改为“辐射强度”,则它以弧度为单位显示每个立体角的功率,作为探测器上入射角的函数。 阅读详情

相关推荐

银河麒麟V11 + KVM/QEMU + GT 710 GPU直通 Win10 完整操作流程文档

宿主机:RTX 5080专门运行ollama大模型服务,通过SSH/VNC远程管理Win10虚拟机:GT 710直通,物理键盘专属,通过物理显示器处理视频应用硬件隔离:两个系统完全隔离,互不干扰,性能最大化两种不同的直通方式直通方式 配置方法 设备在宿主机的状态 典型应用场景PCIe设备直通 vfio-pci.ids=10de:128b,10de:0e0f 设备完全从宿主机消失,被vfio-pci驱动接管 GPU、网卡、NVMe硬盘。

weixin_45285654的博客 1153

HDU 2686 Matrix 最小费用最大流

题意:给一个N*N的矩阵,找一条路从(1,1)到(n,n)然后再从(n,n)回到(1,1),除了(1,1)和(n,n)每个点只能经过一次。思路:把每个点拆成入点和出点,拆点是为了控制权值。(1,1)和(n,n)的 位置流量为2,把(i,j)的入点和(i-1,j) (i,j-1)分别连一条流量为1的边(控制流量,保证每个点只能经过一次)。网络流求的是最小费用,只要将100-权值即可(权值<100),最

NM的专栏 472

IC验证 AHB-RAM 项目(二)——接口与事务代码的编写

本文介绍了准备工作及接口、事务相关代码编写要点。在接口部分,重点说明了lvc_ahb_if.sv、rkv_ahbram_if.sv和rkv_ahbram_tb.sv三个关键文件的功能,其中rkv_ahbram_if.sv通过动态任务实现复位信号控制。事务部分则涉及lvc_ahb_types.sv中的枚举类型定义和lvc_ahb_transaction.sv中的随机化变量设置,用于构建AHB传输激励。整个验证环境采用模块化设计,通过接口实现TB与DUT的通信,为后续验证工作奠定基础。

weixin_45926435的博客 405

全面理解网络流中的最大流问题

网络流(最大流问题) 前序 在将网络里实现算法之前,我们得聊聊网络流究竟是个什么东西,毕竟只有知道它的样貌,才能继续看懂下面的定义,对吧? 首先,网络流不仅仅指的是什么FF算法、dinic算法。算法只是用来解决问题的(稍后我们会更加能体会这一点),而网络流,指的就是这一系列存在图论中的,关于“流(Flow)”的问题。 参考:Network flow problem - Wikipedia 网络流中有以下几种问题: 最大流问题 最小费用流问题 多商品流问题(multi-commodity flow p

Nopoduct的博客 1万+

微信小程序后台定位与实时位置更新的实战指南

本文提供了微信小程序实现后台定位与实时位置更新的完整实战指南。针对小程序退到后台后位置更新中断的痛点,详细解析了基于`startLocationUpdateBackground`API的后台定位解决方案。内容涵盖从隐私协议配置、项目权限声明,到授权、启动、监听、停止的核心代码流程,并分享了真机调试、性能优化及权限引导等关键避坑经验,帮助开发者构建稳定可靠的后台位置服务。

weixin_29008055的博客 468

OpenCV机械臂手眼标定

这篇文章总结了手眼标定的原理,利用OpenCV自带的函数套用参数即可完成眼在手上和眼在手外两种标定。

Q先森的博客 6592

HDU 3338 Kakuro Extension(网络流)

HDU 3338 Kakuro Extension 题目链接 题意:完成如图的游戏,填充数字1-9 思路:网络流的行列模型,把每行每列连续的一段拆分出来建图即可,然后题目有限制一个下限1,所以 每行每列的容量减去相应的数字,然后建图建容量8就好,这样就默认原来容量已经有1了 代码: #include #include #include #include usi

Remilia's 1094

auto.js梦幻西游游戏脚本,梦幻西游脚本开发思路

本篇文章给大家谈谈梦幻西游脚本用什么语言写,以及auto.js梦幻西游游戏脚本,希望对各位有所帮助,不要忘了收藏本站喔。

npy199331的博客 1939

HDU3338 Kakuro Extension 网络流 isap

HDU3338 Kakuro Extension 网络流 isap

NNDXNM的专栏 722

普通开普勒式望远镜光学设计1-初始结构设计选型与物镜像差校正

普通开普勒式望远镜光学设计1: 完成了望远镜的总体结构设计,确定其物镜与目镜的初始结构选型,使用Zemax软件完成望远镜的双胶合物镜的像差校正。

faust_cao的博客 1万+

25 - GRACE Mascon数据缺失月份数据插值

本篇基于文章的相关内容和文章公开的奇异谱分析(SSA)插值算法程序包,对grace Mascon数据种缺失的月份进行 插值 ,总结了使用程序包的相关过程,可以将该程序应用到其他数据处理插值计算中。

weixin_43339605的博客 1843

HDU 3338 Kakuro Extension(网络流)

因为某个地方m写成n玄学调bug一个小时... 写完内心是崩溃的... #include<iostream> #include<cstdio> #include<cstring> #include <list> #include <algorithm> #include <vector> #inc...

banmen2664的博客 185

【Codex】Codex安装+DeepSeek API接入;无需登录,手把手带你使用codex

好多人使用codex时都卡在验证码登录那一步,今天就来介绍一种方法,不需要登录ChatGPT的账号,自然也就不需要手机验证码了;接入DeepSeek的api,一样可以丝滑使用codex;记录从零开始安装使用codex以及DeepSeek API接入的整个过程。不需要登录openAI;

AnChenliang_1002的博客 3539

HDU 3338 Kakuro Extension (网络流,最大流)

HDU 3338 Kakuro Extension (网络流,最大流) Description If you solved problem like this, forget it.Because you need to use a completely different algorithm to solve the following one. Kakuro puzzle is pl...

dipinzhu4111的博客 221

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

hdu3338 神奇网络流(最大流) Kakuro Extension

大意:   原数谜是个很有趣的游戏,如图,每一行或每一列空白称为一个回,每一回都对应着一个整数sum,sum就是这回的和。这些空白格里只能填入1—9这九个数字,且在每一回中不能重复。全黑色的格为空,有数字的格,左下角的表示列的和,右上角的表示行的和,则可以得到下面这个图。 但这道题不是原来的数谜,这题与原数谜相比,少了一点规则,就是,每一回中出现的数字可以重复。给你一个n * m 的图,

lyc 1354

计算机控制技术及应用

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

[kuangbin带你飞]专题十一 网络流\L HDU 3338 Kakuro Extension

题目描述 If you solved problem like this, forget it.Because you need to use a completely different algorithm to solve the following one. Kakuro puzzle is played on a grid of "black" and "white" cel...

Adolphrocs的博客 354

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

HDU3338 Kakuro Extension【网络流】

题意:往白格子中填数,\左下角的数代表向下连续的白格子数的和,右上角的数代表右边连续数的和 思路:最大流,源点 → 行和 → 白格子 → 列和 → 汇点。把有行和的格子看成一个点,连到右边的点,填1-9的数,我们都减一,容量为8,同样源点连到行和的点的容量也要减。列和的也一样 #include #include #include #include #include #incl

狂奔的蜗牛 393

【网络流】hdu3338 Kakuro Extension

题意:原数谜是个很有趣的游戏,每一行或每一列空白称为一个回,每一回都对应着一个整数sum,sum就是这回的和。这些空白格里只能填入1—9这九个数字,且在每一回中不能重复。全黑色的格为空,有数字的格,左下角的表示列的和,右上角的表示行的和。但这道题不是原来的数谜,这题与原数谜相比,少了一点规则,就是,每一回中出现的数字可以重复。给你一个n * m 的图,让你填充一下。 难度:4 题解:这题挺有意

又见炊烟 637

hdu 3338 Kakuro Extension(网络流dinic邻接表实现)

Kakuro Extension Problem Description If you solved problem like this, forget it.Because you need to use a completely different algorithm to solve the following one. Kakuro puzzle is played on a g

a709743744的博客 459

HDU 3338 - Kakuro Extension(网络流‘最大流)

题目: http://acm.hdu.edu.cn/showproblem.php?pid=3338 题意: 给你一个n*m的矩阵,往空白格里面填 1~9的数字,得到列等于左下角的数字,行等于右下角的数字。 思路: 最大流的性质,流入容量会等于流出容量。和题目中的行总和会等于列总和性质相同,由此可以建图。 为了方便建图,本应填入1~9,改为填入0~8,行列和相应减去,便可同普通的最

Halo 770

网络流_hdu3338Kakuro Extension (神奇最大流 Dinic)

题意:         给一个表格的横纵和,用1~9去填,数字可重复,求一种解决方案。                 建图思路:         从空白格任取一个数,假定这个数所在为i行j列。则这个数的数值既被包括在行之和中,也被包括在列之中。那么我们可以采用行进列出的思想。从原点连向行之和节点,从列之和节点连向汇点。 中间就通过任意的空白格节点将行之和与列之和连接起来。题目要求是

野生的TFgirl 749

HDU 3338:Kakuro Extension(脑洞大开的网络流)

http://acm.hdu.edu.cn/showproblem.php?pid=3338 题意:在一个n*m的地图里面,有黑方块和白方块,黑方块可能是“XXXXXXX”或者“YYY/YYY”,这里的YYY代表可能为数字,如果是在“/”左边出现数字,代表在它下面的该列的白方块的和加起来要等于这个数字,如果是在“/”右边出现数字,代表它右边的该行的白方块的和加起来要等于这个数字。我们要做的就是求...

weixin_30325487的博客 189

Kakuro Extension HDU - 3338 (毒瘤+MLE+网络流+数独)

传送门 先说注意: MLE不止与空间有关,还与时间有关的样子。这里M太大就MLE了emm,还一直不知道错在哪里emm. 尽量使用for而不是memset初始化(说的时限制严格的情况下) 其实不必特别注意,只需要知道MLE问题出现在哪儿即可。 题意:n*m的方格。填数——类似数独规则,懂的都懂。 n,m<=100 只能填数1~9 题解:最大流。s->黑横->白->黑竖->t 代码: #include <algorithm> #in

I_have_a_world的博客 244

网络流: HDU 3338

HDU 3338 hdu 3338 Kakuro Extension Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2809 Accepted Submission(s): 971 Special Judge Problem De...

qq_40994343的博客 238

hdu3338 Kakuro Extension(最大流)

Kakuro Extension Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2425    Accepted Submission(s): 844 Special Judge Problem Description

gyr 444
上一篇: HDU 5273 Dylans loves sequence 区间DP
下一篇: HDU 汉诺塔一类问题 1997 2175 2184 2511
_NMfloat_
博客等级 码龄12年 7粉丝 315原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值