#6003. 「网络流 24 题」魔术球

内存限制:256 MiB时间限制:1000 ms标准输入输出
题目类型:传统评测方式:Special Judge
上传者: 匿名

题目描述

假设有 n nn 根柱子,现要按下述规则在这 n nn 根柱子中依次放入编号为 1,2,3,4,⋯ 1, 2, 3, 4, \cdots1,2,3,4,⋯ 的球。

  1. 每次只能在某根柱子的最上面放球。
  2. 在同一根柱子中,任何 2 22 个相邻球的编号之和为完全平方数。

试设计一个算法,计算出在 n nn 根柱子上最多能放多少个球。

输入格式

文件第 1 11 行有 1 11 个正整数 n nn,表示柱子数。

输出格式

第一行是球数。接下来的 n nn 行,每行是一根柱子上的球的编号。

样例

样例输入

  1. 4

样例输出

  1. 11
  2. 1 8
  3. 2 7 9
  4. 3 6 10
  5. 4 5 11

数据范围与提示

1≤n≤55 1 \leq n \leq 551≤n≤55

把每个柱子看成一条路径,跑最小路径覆盖。

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdlib>
  4. #include<cstdio>
  5. #include<cmath>
  6. #include<algorithm>
  7. using namespace std;
  8. struct data {
  9. int to,next,f;
  10. }e[];
  11. int head[],cnt;
  12. void add(int u,int v,int f){e[cnt].to=v;e[cnt].next=head[u];e[cnt].f=f;head[u]=cnt++;}
  13. int n,m,s,t;
  14. bool vis[];
  15. int q[],dis[];
  16. bool bfs() {
  17. memset(dis,-,sizeof(dis));
  18. int h=,tail=;
  19. q[h]=t;
  20. dis[t]=;
  21. while(h!=tail) {
  22. int now=q[h++];if(h==) h=;
  23. for(int i=head[now];i>=;i=e[i].next) {
  24. if(dis[e[i].to]>-||!e[i^].f) continue;
  25. dis[e[i].to]=dis[now]-;
  26. q[tail++]=e[i].to;if(tail==) tail=;
  27. }
  28. }
  29. return dis[s]>=-;
  30. }
  31. int dfs(int now,int a) {
  32. int f=,flow=;
  33. if(now==t) return a;
  34. for(int i=head[now];i>=;i=e[i].next) {
  35. int to=e[i].to;
  36. if(dis[to]==dis[now]+&&e[i].f>) {
  37. f=dfs(to,min(a,e[i].f));
  38. flow+=f;
  39. e[i].f-=f;
  40. e[i^].f+=f;
  41. a-=f;
  42. if(a==) break;
  43. }
  44. }
  45. return flow;
  46. }
  47. int num=;
  48. int ans=;
  49. int sum=;
  50. int dinic() {
  51. while(bfs()) {
  52. sum+=dfs(s,);
  53. }
  54. return num-sum;
  55. }
  56.  
  57. bool work() {
  58. num++;
  59. add(s,num,);add(num,s,);add(num+,t,);add(t,num+,);
  60. for(int i=;i<num;i++) {
  61. if(sqrt(i+num)==(int)sqrt(i+num)) add(num,i+,),add(i+,num,);
  62. }
  63. if(dinic()<=n) return ;
  64. else return ;
  65. }
  66. void pout(int x) {
  67. vis[x]=;
  68. printf("%d ",x);
  69. for(int i=head[x+];i>=;i=e[i].next) {
  70. if(e[i].f==&&!vis[e[i].to]){pout(e[i].to);return;}
  71. }
  72. return;
  73. }
  74. int main() {
  75. memset(head,-,sizeof(head));
  76. scanf("%d",&n);
  77. s=,t=;
  78. while(work()) ;
  79. num--;
  80. printf("%d\n",num);
  81. memset(vis,,sizeof(vis));
  82. vis[s]=vis[t]=;
  83. for(int i=;i<=num;i++) {
  84. if(!vis[i]){pout(i);printf("\n");}
  85. }
  86. }

[loj #6003]「网络流 24 题」魔术球 二分图最小路径覆盖,网络流的更多相关文章

  1. LibreOJ 6003. 「网络流 24 题」魔术球 贪心或者最小路径覆盖

    6003. 「网络流 24 题」魔术球 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数据 ...

  2. Libre 6003 「网络流 24 题」魔术球 (网络流,最大流)

    Libre 6003 「网络流 24 题」魔术球 (网络流,最大流) Description 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为 1,2,3,4......的球. (1)每次只 ...

  3. LOJ6003 - 「网络流 24 题」魔术球

    原题链接 Description 假设有根柱子,现要按下述规则在这根柱子中依次放入编号为的球. 每次只能在某根柱子的最上面放球. 在同一根柱子中,任何2个相邻球的编号之和为完全平方数. 试设计一个算法 ...

  4. 2018.10.14 loj#6003. 「网络流 24 题」魔术球(最大流)

    传送门 网络流好题. 这道题可以动态建图. 不难想到把每个球iii都拆点成i1i_1i1​和i2i_2i2​,每次连边(s,i1),(i2,t)(s,i_1),(i_2,t)(s,i1​),(i2​, ...

  5. 【刷题】LOJ 6003 「网络流 24 题」魔术球

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

  6. 【网络流24题----03】Air Raid最小路径覆盖

    Air Raid Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  7. LibreOJ #6007. 「网络流 24 题」方格取数 最小割 最大点权独立集 最大流

    #6007. 「网络流 24 题」方格取数 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  8. 洛谷P2765魔术球问题 最小路径覆盖

    https://www.luogu.org/problemnew/show/P2765 看到这一题第一眼想到:这不是二分最大流吗,后来发现还有一种更快的方法. 首先如果知道要放多少个球求最少的柱子,很 ...

  9. [cogs396] [网络流24题#4] 魔术球 [网络流,最大流,最小路径覆盖]

    本题枚举每多一个球需要多少个柱子,可以边加边边计算,每次只需要判断$i-Dinic()$即可:特别注意边界. #include <iostream> #include <algori ...

随机推荐

  1. 有关parent.frame.cols在firefox浏览器上不兼容的问题解决

    IE(不兼容FireFox): if(parent.myFrame.cols == "199,7,*") { parent.myFrame.cols="0,7,*&quo ...

  2. 《SQL入门经典》总结

    <SQL入门经典>这本书从考试前就开了个头,一直到前两天才看完,拉的战线也够长的.放假来了,基本上什么内容都不记得了.好不容易看完了,就赶紧总结一下吧! 该书分为两大部分,第一部分是第1~ ...

  3. perf原理再看

    vim ./arch/x86/kernel/hw_breakpoint.c perf如何控制采样的频率 perf采样不同的事件,得到的不是一样 cycles: 向PMU中增加不同的函数,增加不同 使用 ...

  4. [转]掌握 Dojo 工具包,第 2 部分: XHR 框架与 Dojo

    作者:secooler 快乐的DBA Ajax 的兴起改变了传统的 B/S 结构应用程序中以页面为单位的交互模式,Ajax 引入的局部刷新机制带来了更好的用户体验,促使浏览器中的页面开始向应用程序发展 ...

  5. 用Web Service实现客户端图片上传到网站

    由于项目需要,通过本地客户端,把图片上传到网站.通过webservice. 这是客户端代码: private void btnimg_Click(object sender, EventArgs e) ...

  6. POJ3261 Milk Patterns 【后缀数组】

    牛奶模式 时间限制: 5000MS   内存限制: 65536K 提交总数: 16796   接受: 7422 案件时间限制: 2000MS 描述 农夫约翰已经注意到,他的牛奶的质量每天都在变化.经进 ...

  7. pb_ds

    #include<ext/pb_ds/priority_queue.hpp>#define ll long long#define pa pair<ll,int>using n ...

  8. [NOI2002] 银河英雄传说 (带权并查集)

    题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压顶 ...

  9. [bzoj 2844]线性基+高斯消元

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2844 又用到线性基+高斯消元的套路题了,因为经过高斯消元以后的线性基有非常好的序关系,所以 ...

  10. Drac6-Web界面无法访问

    1. ssh idracip, and reset RAC -- will need around 10mins /admin1-> racadm racreset RAC reset oper ...