网络流24题之魔术球问题
其实每个柱子就相当于最小路径覆盖中的一根柱子。
我们要在有n条路径的最小覆盖中加尽量多的点。
所以我们枚举答案加边即可。
By:大奕哥
1 #include<iostream> 2 #include<cstdlib> 3 #include<cstdio> 4 #include<algorithm> 5 #include<cstring> 6 #include<queue> 7 #include<vector> 8 #include<cmath> 9 using namespace std; 10 const int N=100005; 11 int n,m,s=0,t=100000,head[N],d[N],vis[N],w[N],cnt=-1; 12 inline int read(){ 13 int x=0,f=1;char ch=getchar(); 14 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} 15 while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+ch-'0',ch=getchar(); 16 return x*f; 17 } 18 struct node{ 19 int to,nex,w; 20 }e[N<<1]; 21 void add(int x,int y,int w) 22 { 23 e[++cnt].to=y;e[cnt].w=w;e[cnt].nex=head[x];head[x]=cnt; 24 e[++cnt].to=x;e[cnt].w=0;e[cnt].nex=head[y];head[y]=cnt; 25 } 26 queue<int>q; 27 bool bfs(int x,int y) 28 { 29 memset(d,-1,sizeof(d)); 30 d[x]=0;q.push(x); 31 while(!q.empty()) 32 { 33 int x=q.front();q.pop(); 34 for(int i=head[x];i!=-1;i=e[i].nex) 35 { 36 int y=e[i].to; 37 if(!e[i].w||d[y]!=-1)continue; 38 d[y]=d[x]+1; 39 q.push(y); 40 } 41 } 42 return d[y]!=-1; 43 } 44 int dfs(int x,int w,int yy) 45 { 46 if(!w||x==yy)return w; 47 int s=0; 48 for(int i=head[x];i!=-1;i=e[i].nex) 49 { 50 int y=e[i].to; 51 if(!e[i].w||d[y]!=d[x]+1)continue; 52 int flow=dfs(y,min(w-s,e[i].w),yy); 53 if(!flow){ 54 d[y]=-1;continue; 55 } 56 e[i].w-=flow;e[i^1].w+=flow; 57 vis[x]=y;s+=flow; 58 if(s==w)return s; 59 } 60 return s; 61 } 62 int dinic() 63 { 64 int ans=0; 65 while(bfs(s,t)){ 66 ans+=dfs(s,1e9,t); 67 } 68 return ans; 69 } 70 int main() 71 { 72 n=read(); 73 memset(head,-1,sizeof(head)); 74 int ans=0,num=0,x,y; 75 while(ans<=n) 76 { 77 num++; 78 add(s,num<<1,1);add(num<<1|1,t,1); 79 for(int i=sqrt(num)+1;i*i<(num<<1);++i) 80 add((i*i-num)<<1,num<<1|1,1); 81 if(!dinic())w[++ans]=num; 82 } 83 printf("%d\n",num-1); 84 for(int i=1;i<=n;++i) 85 { 86 x=w[i];x<<=1; 87 while(x) 88 { 89 if((x&1))x^=1; 90 printf("%d ",x>>1); 91 y=vis[x]; 92 vis[x]=0; 93 x=y; 94 } 95 printf("\n"); 96 } 97 return 0; 98 }
转载于:https://www.cnblogs.com/nbwzyzngyl/p/8370959.html
网络流24题之魔术球问题相关推荐
- 【网络流24题】魔术球问题(最大流)
[网络流24题]魔术球问题(最大流) 题面 Cogs 题解 是不是像极了最小路径覆盖? 因此,我们枚举放到哪一个球(也可以二分) 然后类似于最小路径覆盖的连边 因为一根柱子对应一个路径的覆盖 所以,提 ...
- 【网络流24题】魔术球问题
[题目]#6003. 「网络流 24 题」魔术球 [算法]最小路径覆盖(详细知识参考网络流总结) [题解](i+j)为完全平方数则连边,那么问题转化为添加尽可能多的点使得最小路径覆盖≤n(一条简单路径 ...
- 网络流24题4. 魔术球问题
魔术球问题 Description 假设有 n 根柱子,现要按下述规则在这 n 根柱子中依次放入编号为 1,2,3,-的球. (1)每次只能在某根柱子的最上面放球. (2)在同一根柱子中,任何 2 个 ...
- [网络流24题][COGS396]魔术球问题简化版(最小割)
题目描述 传送门 注意题目描述:保证答案小于2000并非1600! 题解 有向无环图的最小路径覆盖问题,转化成最小割问题. 最小路径覆盖数随球的数量递增不递减,满足单调性,所以可以枚举答案(或二分答案 ...
- cwl的网络流24题练习
网络流24题 编号 题目 备注 1 飞行员配对方案问题 二分图最大匹配,可最大流解决 2 太空飞行计划问题 3 最小路径覆盖问题 有向图最小路径覆盖,解法都写题目上了 4 魔术球问题 有向图最 ...
- 解题报告:线性规划与网络流24题
目录 A.飞行员配对方案问题 (二分图最大匹配)(最大流)[提高+/省选- ] B.太空飞行计划问题(最大权闭合图转最小割.最小割方案输出)[省选/NOI- ] C.最小路径覆盖问题(有向无环图最小路 ...
- 「网络流24题」 题目列表
「网络流24题」 题目列表 序号 题目标题 模型 题解 1 飞行员配对方案问题 二分图最大匹配 <1> 2 太空飞行计划问题 最大权闭合子图 <2> 3 最小路径覆盖问题 二分 ...
- 【算法】【网络流24题】巨坑待填(成功TJ,有时间再填)
------------------------------------------------------------------------------------ 17/24 --------- ...
- 【题解】网络流24题一句话题解集合
最近写了下<线性规划与网络流24题>,发下代码和题解,事实上就是将交给cycycy的题解复制一下 T1 飞行员配对方案问题 solution 裸的匈牙利 code #include< ...
最新文章
- memcached的基本命令(安装、卸载、启动、配置相关)
- 1045 快速排序 (25 分)
- Java中继承thread类与实现Runnable接口的区别
- 国科大prml-往年习题
- 详解GPU技术关键参数和应用场景
- C++中XML的读写操作(生成XML 解析XML)
- zoj 3629 Treasure Hunt IV
- Eclipse \ MyEclipse \Scala IDEA for Eclipse里如何将控制台console输出的过程记录全程保存到指定的文本文件(图文详解)...
- layui upload 点击上传没有反应 JS动态加载
- linux aria2磁力链接,Linux一键安装Aria2+Yaaw+FileManager实现BT磁力下载,并在线查看/观看...
- 华为星环大数据_星环大数据平台介绍,盘点星环大数据和华为大数据
- 《正确去掉Win7快捷方式小箭头》
- 一维条形码 code128 的全面介绍
- Android中通用配器的使用
- 批量修改图片的后缀名以及删除相同的符号
- 个人所得税年度应纳税额抵扣-云服务器ECS入门-考试题及答案-申报更正流程
- linux下将多个文件去除文件头合并_Linux下把多个文件合并成一个文件 - 卡饭网...
- 计算机如何修改任务管理器,win7如何更改任务管理器快捷键_win7更改任务管理器快捷键的教程...
- 【有利可图网】PS技巧:巧用PS制作朦胧古风美女!
- 闲鱼链接搭建+完整版源码带后台
热门文章
- 2-4. BCD解密(10)
- 转:Eclipse中打开文件所在文件夹的插件及设置
- 无法安装或运行应用程序。该应用程序要求首先在“全局程序集缓存(gac)”中安装程序集system.data.entity...
- RedHat 系列 Linux 安装后,建立嵌入式开发环境
- 前景检测算法_1(codebook和平均背景法)
- 获取VirtualBox COM对象失败,Unable to start the virtual device
- 手写webpack系列一:了解认识loader-utils
- D3DX 9.9 LEARNERNOTO
- Flex 布局教程:实例篇
- maven update项目报错