其实每个柱子就相当于最小路径覆盖中的一根柱子。

我们要在有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题之魔术球问题相关推荐

  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题][COGS396]魔术球问题简化版(最小割)

    题目描述 传送门 注意题目描述:保证答案小于2000并非1600! 题解 有向无环图的最小路径覆盖问题,转化成最小割问题. 最小路径覆盖数随球的数量递增不递减,满足单调性,所以可以枚举答案(或二分答案 ...

  5. cwl的网络流24题练习

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

  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. memcached的基本命令(安装、卸载、启动、配置相关)
  2. 1045 快速排序 (25 分)
  3. Java中继承thread类与实现Runnable接口的区别
  4. 国科大prml-往年习题
  5. 详解GPU技术关键参数和应用场景
  6. C++中XML的读写操作(生成XML 解析XML)
  7. zoj 3629 Treasure Hunt IV
  8. Eclipse \ MyEclipse \Scala IDEA for Eclipse里如何将控制台console输出的过程记录全程保存到指定的文本文件(图文详解)...
  9. layui upload 点击上传没有反应 JS动态加载
  10. linux aria2磁力链接,Linux一键安装Aria2+Yaaw+FileManager实现BT磁力下载,并在线查看/观看...
  11. 华为星环大数据_星环大数据平台介绍,盘点星环大数据和华为大数据
  12. 《正确去掉Win7快捷方式小箭头》
  13. 一维条形码 code128 的全面介绍
  14. Android中通用配器的使用
  15. 批量修改图片的后缀名以及删除相同的符号
  16. 个人所得税年度应纳税额抵扣-云服务器ECS入门-考试题及答案-申报更正流程
  17. linux下将多个文件去除文件头合并_Linux下把多个文件合并成一个文件 - 卡饭网...
  18. 计算机如何修改任务管理器,win7如何更改任务管理器快捷键_win7更改任务管理器快捷键的教程...
  19. 【有利可图网】PS技巧:巧用PS制作朦胧古风美女!
  20. 闲鱼链接搭建+完整版源码带后台

热门文章

  1. 2-4. BCD解密(10)
  2. 转:Eclipse中打开文件所在文件夹的插件及设置
  3. 无法安装或运行应用程序。该应用程序要求首先在“全局程序集缓存(gac)”中安装程序集system.data.entity...
  4. RedHat 系列 Linux 安装后,建立嵌入式开发环境
  5. 前景检测算法_1(codebook和平均背景法)
  6. 获取VirtualBox COM对象失败,Unable to start the virtual device
  7. 手写webpack系列一:了解认识loader-utils
  8. D3DX 9.9 LEARNERNOTO
  9. Flex 布局教程:实例篇
  10. maven update项目报错