传送门


又是一个神奇的建图题,建图\(Van\)♂全不会啊

大体就是我们一个一个的把球放进来,每放进来一个,我们就求出当前的最小路径覆盖数(当前顶点数-最大流),直到最小路径覆盖数\({>}\)柱子数。此时的球的编号\(-1\)就是第一问的答案。第二问就是求每一条路径,顺着推下来就好了

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cmath>
using namespace std;
struct zzz{int t,len,nex;
}e[100010<<1]; int head[20010],tot=1;
void add(int x,int y,int z){e[++tot].t=y;e[tot].len=z;e[tot].nex=head[x];head[x]=tot;
}
int s=0,t=20000,vis[20010],pre[20010];
bool bfs(){memset(vis,0,sizeof(vis));queue <int> q; q.push(s); vis[s]=1;while(!q.empty()){int k=q.front(); q.pop();for(int i=head[k];i;i=e[i].nex){int to=e[i].t;if(vis[to]||!e[i].len) continue;q.push(to); vis[to]=vis[k]+1;if(to==t) return 1;}}return vis[t];
}
int dfs(int now,int flow){if(now==t||!flow) return flow;int rest=0,fl;for(int i=head[now];i;i=e[i].nex){int to=e[i].t;if(vis[to]==vis[now]+1&&(fl=dfs(to,min(flow,e[i].len)))){e[i].len-=fl, e[i^1].len+=fl, rest+=fl;if(rest==flow) return rest;}}if(rest<flow) vis[now]=0;return rest;
}
int dinic(){int ans=0;while(bfs()) ans+=dfs(s,2147483647);return ans;
}
int read(){int k=0; char c=getchar();for(;c<'0'||c>'9';) c=getchar();for(;c>='0'&&c<='9';c=getchar())k=(k<<3)+(k<<1)+c-48;return k;
}
bool jl[20010]; int next[20010];
int main(){int n=read(),cnt=0,num=0;while(cnt<=n){num++; cnt++;for(int i=1;i<num;i++)if(sqrt(i+num)==(int)sqrt(i+num))add(i,num+10000,1),add(num+10000,i,0);add(s,num,1); add(num,s,0);add(num+10000,t,1); add(t,num+10000,0);cnt-=dinic();}printf("%d\n",--num);for(int i=1;i<=num;i++){for(int j=head[i];j;j=e[j].nex){if(!e[j].len){next[i]=e[j].t-10000;break;}}}for(int i=1;i<=num;i++){if(jl[i]) continue;int x=i;while(x!=-10000){jl[x]=1; printf("%d ",x);x=next[x];}printf("\n");}return 0;
}

转载于:https://www.cnblogs.com/wxl-Ezio/p/9445771.html

网络流24题 魔术球问题相关推荐

  1. 网络流24题-魔术球问题

    魔术球问题 时空限制1000ms / 128MB 题目描述 «问题描述: 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球. (1)每次只能在某根柱子的最上面放球. ( ...

  2. 网络流24题——魔术球问题(有向无环图最小路径覆盖)

    链接:https://www.oj.swust.edu.cn/oj/problem/show/1739 分析: 有向无环图最小路径覆盖:给定有向无环图,求一个路径划分,使得每个点在且只在一条路径上,路 ...

  3. [网络流24题]魔术球问题(简化版)

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

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

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

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

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

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

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

  7. 「网络流24题」 题目列表

    「网络流24题」 题目列表 序号 题目标题 模型 题解 1 飞行员配对方案问题 二分图最大匹配 <1> 2 太空飞行计划问题 最大权闭合子图 <2> 3 最小路径覆盖问题 二分 ...

  8. 【算法】【网络流24题】巨坑待填(成功TJ,有时间再填)

    ------------------------------------------------------------------------------------ 17/24 --------- ...

  9. 【题解】网络流24题一句话题解集合

    最近写了下<线性规划与网络流24题>,发下代码和题解,事实上就是将交给cycycy的题解复制一下 T1 飞行员配对方案问题 solution 裸的匈牙利 code #include< ...

最新文章

  1. 基于MEGA8的声音CLICK模块
  2. 【django】项目开发准备【1】
  3. 翻动100万级的数据
  4. IDEA 学习笔记之 安装和基本配置
  5. Mysql 行前自动排序_mysql 取得行号后再排序
  6. php监测tomcat,java_JAVA实现监测tomcat是否宕机及控制重启的方法,本文实例讲述了JAVA实现监测tom - phpStudy...
  7. 图解对比MySQL索引为什么要用B+树
  8. 思科网络学习笔记 | 路由概念
  9. thinkpad解决Win8.1电源管理的方法
  10. 2019年伯克利大学 CS294-112《深度强化学习》第4讲:强化学习简介(笔记)
  11. 如何用仅用C语言判断编译器的大小端
  12. IBM X3650M3存储raid阵列瘫痪的恢复过程
  13. Sutton reinforcement learning _ Chapter 2 Multi-armed Bandits
  14. 群晖NAS的公网、NAT、DDNS、证书等配置一
  15. 不同手机型号图文预览_微信编辑器预览一般以多大的手机尺寸为准?
  16. 美国如果把根域名服务器封了,中国会从网络上消失?
  17. 如何使用NFS发布共享资源,以及如何访问NFS共享资源
  18. ISO27001和ISO20000两大体系认证的区别和联系
  19. 基于STM32单片机和Labview的温湿度波形实时显示串口助手(一)----手把手教学
  20. win10没有Microsoft store怎么办?win10没有微软商店的恢复方法

热门文章

  1. 在markdown编辑模式中打出彩色的文字
  2. 代码段间转移控制时的特权级检查(JMP/CALL)——《x86汇编语言:从实模式到保护模式》读书笔记28
  3. java 操作 ES 的方式 整理总结
  4. C语言再学习 -- 函数
  5. Android开发 Intent传递参数,获取数据为null
  6. 再谈 Application ProvidedAar
  7. clickhouse数据手动迁移
  8. java自由块_JAVA 静态的自由块和非静态的自由块
  9. 购进不需要安装的生产设备_静压砖机设备生产环境的选择及安装前期事项分析...
  10. Qt 清空QPixMap