题目描述

传送门
注意题目描述:保证答案小于2000并非1600!

题解

有向无环图的最小路径覆盖问题,转化成最小割问题。
最小路径覆盖数随球的数量递增不递减,满足单调性,所以可以枚举答案(或二分答案),对于特定的答案求出最小路径覆盖数,一个可行解就是最小路径覆盖数等于N的答案,求出最大的可行解就是最优解。本问题更适合枚举答案而不是二分答案,因为如果顺序枚举答案,每次只需要在残量网络上增加新的节点和边,再增广一次即可。如果二分答案,就需要每次重新建图,大大增加了时间复杂度。
具体方法可以顺序枚举A的值,当最小路径覆盖数刚好大于N时终止,A-1就是最优解。

代码

#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;const int max_n=4000;
const int max_N=max_n*2+2;
const int max_m=max_n*max_n*2;
const int max_e=max_m*2;
const int INF=1e9;int n,N,maxflow,ans;
bool can[max_n];
int tot,point[max_N],next[max_e],v[max_e],remain[max_e];
int deep[max_N],last[max_N],cur[max_N],num[max_N];
queue <int> q;inline void addedge(int x,int y,int cap){++tot; next[tot]=point[x]; point[x]=tot; v[tot]=y; remain[tot]=cap;++tot; next[tot]=point[y]; point[y]=tot; v[tot]=x; remain[tot]=0;
}inline void bfs(int t){while (!q.empty()) q.pop();q.push(t);while (!q.empty()){int now=q.front(); q.pop();for (int i=point[now];i!=-1;i=next[i])if (deep[v[i]]==max_N&&remain[i^1]){deep[v[i]]=deep[now]+1;q.push(v[i]);}}
}inline int addflow(int s,int t){int ans=INF,now=t;while (now!=s){ans=min(ans,remain[last[now]]);now=v[last[now]^1];}now=t;while (now!=s){remain[last[now]]-=ans;remain[last[now]^1]+=ans;now=v[last[now]^1];}return ans;
}inline void isap(int s,int t,int number){bfs(t);for (int i=1;i<=number;++i)++num[deep[i]];int now=s;while (deep[s]<max_N){if (now==t){maxflow+=addflow(s,t);now=s;break;}bool has_find=false;for (int i=point[now];i!=-1;i=next[i])if (deep[v[i]]+1==deep[now]&&remain[i]){has_find=true;cur[now]=i;last[v[i]]=i;now=v[i];break;}if (!has_find) break;}
}int main(){freopen("balla.in","r",stdin);freopen("balla.out","w",stdout);scanf("%d",&n);for (int i=1;i*i<=4000;++i)can[i*i]=true;tot=-1;memset(point,-1,sizeof(point));memset(next,-1,sizeof(next));for (int t=1;;++t){addedge(1,2*t+1,1);addedge(2*t+2,2,1);    for (int i=1;i<t;++i)if (can[i+t])addedge(2*i+1,2*t+2,1);deep[2*t+1]=max_N;deep[2*t+2]=max_N;deep[1]=max_N;deep[2]=0;isap(1,2,t*2+2);ans=t-maxflow;if (ans>n){printf("%d\n",t-1);break;}}return 0;
}

总结

如何每次加边并进行一次增广注意一下。

[网络流24题][COGS396]魔术球问题简化版(最小割)相关推荐

  1. 【网络流24题】魔术球问题(最大流)

    [网络流24题]魔术球问题(最大流) 题面 Cogs 题解 是不是像极了最小路径覆盖? 因此,我们枚举放到哪一个球(也可以二分) 然后类似于最小路径覆盖的连边 因为一根柱子对应一个路径的覆盖 所以,提 ...

  2. 【网络流24题】魔术球问题

    [题目]#6003. 「网络流 24 题」魔术球 [算法]最小路径覆盖(详细知识参考网络流总结) [题解](i+j)为完全平方数则连边,那么问题转化为添加尽可能多的点使得最小路径覆盖≤n(一条简单路径 ...

  3. 网络流24题4. 魔术球问题

    魔术球问题 Description 假设有 n 根柱子,现要按下述规则在这 n 根柱子中依次放入编号为 1,2,3,-的球. (1)每次只能在某根柱子的最上面放球. (2)在同一根柱子中,任何 2 个 ...

  4. [网络流24题][BZOJ1475]方格取数(最小割)

    题目描述 传送门 题解 讲棋盘进行黑白染色,从超级源向所有黑点连边,容量为num:从所有白点向超级汇连边,容量为num:再从所有的黑点向与之相邻的白点连边,容量为INF. 求最小割(最大流)即为答案. ...

  5. 网络流24题之魔术球问题

    其实每个柱子就相当于最小路径覆盖中的一根柱子. 我们要在有n条路径的最小覆盖中加尽量多的点. 所以我们枚举答案加边即可. By:大奕哥 1 #include<iostream> 2 #in ...

  6. 线性规划与网络流24题 太空飞行计划问题 (最小割及输出方案)

    太空飞行计划问题 题目描述 W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,-,Em},和进行这些实验需 ...

  7. 【网络流24题】餐巾计划问题(最小费用最大流)

    [网络流24题]餐巾计划问题(最小费用最大流) 题面 COGS 洛谷上的数据范围更大,而且要开longlong 题解 餐巾的来源分为两种: ①新买的 ②旧的拿去洗 所以,两种情况分别建图 先考虑第一种 ...

  8. cwl的网络流24题练习

    网络流24题 编号 题目 备注 1 飞行员配对方案问题 二分图最大匹配,可最大流解决 2 太空飞行计划问题   3 最小路径覆盖问题  有向图最小路径覆盖,解法都写题目上了 4 魔术球问题  有向图最 ...

  9. 解题报告:线性规划与网络流24题

    目录 A.飞行员配对方案问题 (二分图最大匹配)(最大流)[提高+/省选- ] B.太空飞行计划问题(最大权闭合图转最小割.最小割方案输出)[省选/NOI- ] C.最小路径覆盖问题(有向无环图最小路 ...

最新文章

  1. hbase shell命令_HBASE的shell操作
  2. 位运算02 - 零基础入门学习C语言65(完)
  3. 使用SG_IO发送SCSI 指令测试底层驱动的scatter-gather 功能
  4. nssl1257-A【数论】
  5. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南):签到题A Matrix Equation(高斯消元求线性异或方程组自由元个数)
  6. 基于BERT进行商品标题实体识别,很详细~
  7. 松下plc编程线usb驱动
  8. 原始LBP算法 代码
  9. Python基础知识题库(带答案)
  10. 尝试用朴素贝叶斯分析借款信用等级
  11. Linux 查看日志命令tail的用法
  12. 智能称重系统,车牌识别的优势
  13. android post请求时报415错误,post请求传递JSON数据类型(415错误解决)
  14. Part 66 - Check及Uncheck所有CheckBox 同时删除多行数据记录的实现
  15. 程序的启动、卸载和分享
  16. shareSdk 新浪微博的登录分享测试
  17. 【5G】NAS安全密钥衍生算法详解
  18. 一些计算机u口无法使用的原因,电脑USB接口不能使用的原因分析
  19. 智能优化算法:白鲸优化算法-附代码
  20. 各位大佬,怎么判断水卡的类型和判断其是否联网!!

热门文章

  1. java之jvm学习笔记十三(jvm基本结构)
  2. LINUX开源软件测试大乐,开源性能测试工具大比武
  3. 2023年PMP 具体的考试时间是什么时候?
  4. 2022新版手机软件库游戏库系统源码
  5. python如何获取网络上的图片并将其保存在本地
  6. 终极解决方案:Package install failed, see above. The Schematic workflow failed. See above,angualr新建项目报错
  7. How to recovery compiz
  8. 名企CEO们妙语批点求职简历
  9. 传聚美优品将赴美上市 公司估值超30亿美元
  10. 音频服务器未能正常启动,Win10音频服务未正常运行怎么办?