洛谷P2765魔术球问题(网络流24题)

gesp c++ 八级知识点 阅读详情

首先我们考虑如何建图,即表达相邻球之间的关系。
可以将一个球拆点为Ai和Bi,先从源点S向Ai连容量为1的边,从B_i 向汇点连容量为1的边。对于能够与它编号和为完全平方数的球j,连接A_j和Bi。
枚举球数,球数每增加1就建立新加入的球的关系,并且重复地跑最大流。柱子数对于球数存在一种单调递增的相关关系,我们这样可以求出某一柱子数下最多能放置的球数,因为当新加入的球能够加入柱子时,重复跑最大流是能得到新流(即:该球可与其他球构成新的相邻关系)的,只要一直能得到新流,就说明柱子上还可以再加,当有一次得不到新流,就说明柱子满了,新加入的球并没能加入到任何一个柱子上。此时我们就加柱子。直到柱子加到超过n,此时的球数-1就是最大球数(因为此时实际上柱子加到超过n了)。

说法2:
观察本题,对于一个进来的编号的球,他有两种情况,
1.放在某个和他组成平方数的球的后面
2.独立门户
我们要使这两种情况都合法,这样我们可以发挥网络流调整的优势
对于两种情况,为了使结果合法,我们姑且先将它和t直接相连
情况2显然要和s相连,情况1要和前面的点相连
又和s相连,又和t相连,还要和别的点相连,显然一个点是不够的
我们把一个点分开来,分开来的两个点不能相连,否则最大流就没有意义了
直接s-u-u’-t显然没有调整的作用
那么我们将u和s相连,u’和t相连,为了满足第一种条件
满足关系的两个点u、v,建立v-u’
那么在图中跑最大流算法即可

#include<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
#include<cstring>
#include<cmath>
using namespace std;
struct edge{
    int to,cap,rev;
};
vector<edge>G[21000];
int level[20500],iter[20500];bool vis[20500];
void addedge(int from,int to,int cap)
{
    G[from].push_back(edge{to,cap,(int)G[to].size()});
    G[to].push_back(edge{from,0,(int)G[from].size()-1});//反向容量为0!!
}
void bfs(int s)
{
    memset(level,-1,sizeof(level));
    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>0&&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++){//注意传引用!
        edge&e=G[v][i];
        if(e.cap>0&&level[v]<level[e.to]){
            int d=dfs(e.to,t,min(f,e.cap));
            if(d>0){
                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,0x7f7f7f7f))
            flow+=f;
    }
}
int main()
{
    int n,i,j,k,cnt;
    cin>>n;
    int ball;
    for(cnt=0,ball=1;cnt<=n;cnt++){
        if(cnt){
            ball++;//maxflow(0,20000);
        }
        for(;;ball++){
            addedge(0,ball,1);addedge(ball+10000,20000,1);//addedge(ball,ball+10000,1);
            for(i=1;i<ball;i++){
                if(sqrt(ball+i)==(int)sqrt(ball+i)){
                    addedge(i,ball+10000,1);
                }
            }
            if(!maxflow(0,20000))break;
        }
    }
    cout<<ball-1;
    for(i=1;i<=ball-1;i++){//输出路径类似于线性表的玩法
        if(vis[i])continue;
        vis[i]=true;cout<<endl<<i<<' ';k=i;
        while(1) {
            bool find=false;
            for (auto j = G[k].begin(); j != G[k].end(); j++) {
                edge e = *j;
                if (e.to > 10000 && e.cap == 0) {//一定要加上第一个判断条件,否则可能混入反向边
                    cout << e.to - 10000 << ' ';
                    vis[e.to - 10000] = true;
                    k = e.to - 10000;find=true;
                    break;
                }
            }
            if(!find)break;
        }
    }

    return 0;
}

另:本题简单的贪心也能过,不过不保证完全正确;
贪心策略:用二维数组记录每个柱子上的元素,按顺序枚举,将新元素与每个柱顶元素比较判断是否合法,合法就加入该柱子,否则新开一个柱子,若当前柱子数超过题目要求,则退出,输出答案,然后将二维数组记录的答案输出。

【YOLOv13多模态融合改进】| CFT:跨模态融合Transformer | 利用Transformer的自注意力机制,解决跨模态融合中的长距离依赖和全局信息整合问题 本文记录的是利用 CFT 模块改进 YOLOv13 的多模态目标检测网络模型。的设计出发点在于解决传统多模态检测中跨模态特征融合不充分的问题,即当不同模态数据需协同检测时,基于CNN的方法因局部卷积的局限性,难以捕捉长距离依赖和全局模态间的互补信息,导致复杂光照、遮挡等场景下检测精度不足。本文利用模块,将多模态特征序列拼接后自动学习模态内与模态间的交互权重,在特征提取阶段整合全局上下文信息,增强对不同模态互补特征的利用能力,从而提升模型在多模态场景下的检测鲁棒性与准确性。Cross-Modality Fus 阅读详情

相关推荐

MIUI升级后录音神秘消失?别慌!手把手教你从Android/data目录找回宝贵录音文件

本文详细解析了MIUI升级后录音文件消失的原因,并提供了从Android/data目录找回录音文件的实用指南。通过技术分析和步骤演示,帮助小米手机用户解决录音文件丢失问题,同时分享预防措施和高级恢复方案,确保重要录音数据安全。

weixin_30696427的博客 281

P2765 魔术球问题(网络流,隐式图构造)

P2765 魔术球问题 这道题的思路实在是太罕见了,所以发一篇blog 从某一新放入的球开始看起 1.放入原来的柱子上 2.放入新的柱子 并将每个点进行拆点,然后将可以组成平方数的两个树相连,在每次跑网络流的时候记录流的流向即可,如果流量为0,则表明1行不通,只能新来第一个柱子 #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #define inf 0x7fffffff #define ll long

lcl1234567890lcl的博客 363

金蝶K3系统物料主数据后台表对应字段一览

我们说到物料表,一般是指t_icitem,但正确的说t_icitem并不是一张有,而是一张视图,不过我们对于数据库物料表中的大部分操作,都是通过此视图来完成。比如经常通过此视图,来成批修改数量,单价精度,是否启用批次等一些字段,有的时候,对于账套已经启用,并且已经有业务发生的物料,有一些关键属性也需要通过修改物料表t_icitem来进行。 当然修改的时候,需要考虑一些前提条件的。 比如说我有一个客户新建的账套,在月底结账时发现,要改一种成本核算方法,启用时用的是加权平法,现在想改成移动平均法,这样的情况,

hzfw2008的博客 1万+

洛谷 P2765 魔术球问题 解题报告

思路比较有趣,也比较新颖。 但想通了其实ok。 IDEA: 首先,很容易想到球数和柱子数正相关。因为加球一定不会使柱子数减少。 这样的话,我们从第一个球开始加入图中,每一个球拆成入点和出点,s->i*2=1,i*2+1->t=1 (用i*2和i*2+1表示的原因是:动态加点不知道总球数) 然后,每加一个新的球,我们试图让它和之前的球连边: 设这个球是now,设...

weixin_30387799的博客 136

深入解析组合逻辑环(combinational loop)的成因与解决方案

本文深入解析了数字电路设计中组合逻辑环(combinational loop)的成因与危害。通过边沿检测和中断轮询(round_robin)仲裁器等实例,揭示了代码如何意外形成环路,并对比了插入触发器、重构逻辑以及状态机思维三种核心解决方案,帮助硬件工程师从根本上避免这一常见设计陷阱,确保电路稳定可靠。

weixin_28278377的博客 313

第3.2.1章 Eigen代码实战:四元数赋值用法总结及与变换矩阵转换

Eigen库中四元数(Quaternion)的赋值方法解析:Quaterniond和Quaternion<double>本质相同,但Quaterniond是更简洁的别名。主要赋值方式包括直接构造(w,x,y,z分量、旋转矩阵或轴角)、赋值运算符和成员函数赋值。使用时需注意参数顺序、归一化处理和头文件包含,常见错误包括模板参数缺失和构造顺序错误。四元数广泛应用于旋转矩阵转换、姿态组合等场景,合理选择赋值方式能提高代码可读性和正确性。

行知SLAM 587

洛谷 P2765 魔术球问题 (dinic求最大流,最小边覆盖)

P2765 魔术球问题 题目描述 «问题描述: 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球。 (1)每次只能在某根柱子的最上面放球。 (2)在同一根柱子中,任何2个相邻球的编号之和为完全平方数。 试设计一个算法,计算出在n根柱子上最多能放多少个球。例如,在4 根柱子上最多可放11 个球。 «编程任务: 对于给定的n,计算在n根柱子上最多能放多少个球。...

weixin_30387663的博客 829

优化算法 | 赏金猎人优化算法(Bounty Hunter Optimizer, BHO)及其在多无人机移动边缘计算与路径规划中的应用(附matlab源代码)

移动边缘计算(Mobile Edge Computing, MEC)通过将计算资源下沉至网络边缘,有效解决了物联网终端设备计算能力不足与能耗受限的问题。无人机(Unmanned Aerial Vehicle, UAV)因其高机动性、灵活部署和广域覆盖等优势,被广泛用作MEC的移动服务器平台。多无人机辅助MEC系统的核心优化问题在于:如何在满足任务处理时延约束和无人机能量限制的前提下,联合优化无人机的三维飞行轨迹、任务卸载决策与计算资源分配,以最小化系统总能耗或最大化任务完成效率。

尘世冰封的专栏 223

洛谷 P2765 魔术球问题

题目描述: 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球。 (1)每次只能在某根柱子的最上面放球。 (2)在同一根柱子中,任何2个相邻球的编号之和为完全平方数。 试设计一个算法,计算出在n根柱子上最多能放多少个球。例如,在4 根柱子上最多可放11 个球。 «编程任务: 对于给定的n,计算在n根柱子上最多能放多少个球以及放球的方案。 ...

dewen9709的博客 340

K8S搭建(centos)四、安装K8S

每个人都有惰性,但不断学习是好好生活的根本,共勉!

感谢阅读 2646

【Bug已解决】Codex 切换 model_provider 后历史会话消失的解决方案

方案适用场景推荐指数切回原 provider 验证排查的第一步,确认数据是否真的丢失⭐⭐⭐⭐⭐查看本地会话文件进一步确认数据完整性⭐⭐⭐⭐⭐查阅跨 provider 恢复命令官方是否提供了对应功能⭐⭐⭐使用社区辅助工具需要频繁切换 provider 的场景⭐⭐⭐定期备份配置目录任何场景下的通用保险措施⭐⭐⭐⭐切换后历史会话"消失"的本质是客户端的会话列表展示逻辑受当前活跃 provider 状态过滤,而不是原始数据文件被真正删除。

一键难忘的博客 5999

洛谷 P1757 通天之分组背包

题目 #include<iostream> #include<cstdio> #include<vector> using namespace std; const int maxn=2000; int w[maxn],v[maxn],f[maxn]; vector<int >g[200]; int n,m; int main() { cin&gt...

zailingzhe的博客 153

YOLOv11缝合改进Conv | SAConv在YOLOv11中的应用可切换空洞卷积与性能提升(附代码)

在本篇文章中,我们将深入探讨如何通过引入**SAConv**(Switchable Atrous Convolution,可切换空洞卷积)来优化YOLOv11网络结构,特别是在卷积操作方面的创新。我们会解析SAConv的核心原理和架构设计。

一键难忘的博客 950

洛谷 P2765 魔术球问题 (网络流24题)

题目:魔术球问题 思路: 听说这题答案的范围很小。 听说从1开始枚举答案大小不会超时。 然后我就枚举答案了。 假设答案为m,就对于m个数,每个数暴力的寻找可以可以放在它下面的数再建边。 由于只有可能上面的点指向下面的点,所以这张图不存在环,可见是一张二分图。 然后从m开始跑一遍匈牙利算法看看能否求出增广路,如果不能,则说明无法对m进行匹配,则需要再加一根柱子放m。 当柱子的数量大于n时,就说明m-...

iwi 453

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

洛谷OJ:P2765 魔术球问题(网络流24题)

题目描述 假设有n根柱子,现要按下述规则在这nn根柱子中依次放入编号为1,2,3,...的球“ 每次只能在某根柱子的最上面放球。 同一根柱子中,任何2个相邻球的编号之和为完全平方数。 试设计一个算法,计算出在n根柱子上最多能放多少个球。例如,在4根柱子上最多可放11个球。 对于给定的n,计算在n根柱子上最多能放多少个球。 输入格式 只有一行一个整数n,代表柱子数。 输出格式 本题存在 Special Judge。 请将n根柱子上最多能放...

信仰.的博客 563

数学建模模型总结

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

【网络流24题-4】洛谷P2765 魔术球问题

DAG的最小不相交路径覆盖

a free man 270

ssm框架搭建

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

洛谷 P2765 魔术球问题(网络流24题-最大流)

题意:中文题(lrj黑书上好像有这道题) 思路:这个题的建图还真的是挺有意思的,我们把一个球拆成2个点a,b。 然后让a点连S点,b点连T点,如果有两个数的加和为平方数,那我们就用第一个数的a点连向第二个数的b点,这样就有一条流直接流向汇点T 代码:(顺便get了怎么打印路径,赋学习传送门) #include <bits/stdc++.h> using namespace ...

weixin_30617561的博客 133

[网络流24题]魔术球问题

题目:洛谷P2765。 题目大意:给你n根柱子,现在让你从1开始,每次把一个数放到柱子上。 规定放上来的数要么在最下面,要么与下面一个数的和为完全平方数。 求最多能放多少个数,并输出方案。 解题思路:这道题可以贪心。 每次有一个数,它能放哪里就直接给它放着,不去考虑。 据说可以证明,但我不会。 标准做法是网络流。 做法大致是拆点,然后连边跑即可。 我用贪心玄幻地过了。 ...

181

洛谷网络流24题

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

PCCCCC的博客 997

洛谷P2765:魔术球问题

(这题很舒服。。。) 题目大意       题目写得很清楚。        假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球。       (1)每次只能在某根柱子的最上面放球。       (2)在同一根柱子中,任何2个相邻球的编号之和为完全平方数。        试设计一个算法,计算出在n根柱子上最多能放多少个球。例如,在4 根柱

Deep_Kevin的娱乐空间 822

「Luogu2765」[网络流24题] 魔术球问题 - 贪心

->戳我进原题 [网络流24题] 魔术球问题 时空限制:1000ms / 128MB 问题描述 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球。 (1)每次只能在某根柱子的最上面放球。 (2)在同一根柱子中,任何2个相邻球的编号之和为完全平方数。 试设计一个算法,计算出在n根柱子上最多能放多少个球。例如,在4 根柱子上最多可放11 个球。 编程任务 ...

weixin_30443813的博客 176

洛谷P2765 魔术球问题

题目描述«问题描述:假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球。(1)每次只能在某根柱子的最上面放球。(2)在同一根柱子中,任何2个相邻球的编号之和为完全平方数。试设计一个算法,计算出在n根柱子上最多能放多少个球。例如,在4 根柱子上最多可放11 个球。«编程任务:对于给定的n,计算在n根柱子上最多能放多少个球。输入输出格式输入格式:第1 行有1个正整数n,表...

蒟蒻的博客 389

网络流(17/24)

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

Rshs 305

洛谷——网络流24题

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

我们都有光明的未来 908

网络流24题——魔术球问题

题目链接:https://www.luogu.org/problemnew/show/P2765 【问题分析】 枚举答案转化为判定性问题,然后最小路径覆盖,可以转化成二分图最大匹配,从而用最大流解决。 【建模方法】 枚举答案A,在图中建立节点1..A。如果对于i&lt;j有i+j为一个完全平方数,连接一条有向边(i,j)。该图是有向无环图,求最小路径覆盖。如果刚好满足最小路径覆盖数等于N,...

GYH0730的博客 260

网络流24题 第四题 - 洛谷2765 魔术球游戏 有向无环图最小路径覆盖 最大流

欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - 洛谷2765 题意概括 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球。   (1)每次只能在某根柱子的最上面放球。   (2)在同一根柱子中,任何2个相邻球的编号之和为完全平方数。 试设计一个算法,计算出在n根柱子上最多能放多少个球。 (哈哈...

weixin_30338461的博客 162
上一篇: (模板)二分图最大匹配,最大流算法
下一篇: 洛谷P2766最长不下降子序列问题(网络流24题)
HumveeA6
博客等级 码龄17年 12粉丝 175原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值